用Bmob实现用户数据添加和查询显示

2023-05-16

我用的例子利用Bmob云服务器实现了让用户上传待出售商品信息,以及能浏览在售商品信息的小功能。刚接触Bmob感觉它确实好用,但我不得不吐槽那个案例更新的太慢了,新版本的SDK跟老版本还是有很大差别的,建议更新SDK的同时也更新一下案例。再就是文档写的不怎么详细。好了,废话不多说,先看一下我的效果图:

其中,主要问题就是用户数据上传数据的下载显示在屏幕上

注意啦:

在这里我用的是Bmob目前最新的android SDK版本,这个配置也泼烦的很,新版本和旧版本有很多方法有很大差异,如果大家用的不是我的这个版本的请先看一下这个SDK版本的具体配置方法http://blog.csdn.net/flx413/article/details/52475766 我就是按照这个来的!



一:用户数据上传的实现:

<span style="font-size:18px;"><span style="font-size:14px;">goods_add.setOnClickListener(new View.OnClickListener() {<span style="white-space:pre">	</span>//"上架"按钮的监听事件
            @Override
            public void onClick(View v) {
                final String name, desc, icon_path;
                final double price;
                name = goods_name.getText().toString();
                desc = goods_desc.getText().toString();
                price = Double.parseDouble(goods_price.getText().toString());//得到浮点数

                //获取文件路径
                //icon_path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + "/1.jpg";
                icon_path = imagePath;
                System.out.println(imagePath);
                final BmobFile bmobfile = new BmobFile(new File(icon_path));
                bmobfile.upload(new UploadFileListener() {
                    @Override
                    public void done(BmobException e) {
                        if (e == null) {<span style="white-space:pre">	</span>//为空说明没有异常
                            System.out.println("图片上传成功");
                            Goods goods = new Goods();
                            goods.setName(name);
                            goods.setDesc(desc);
                            goods.setPrice(price);
                            goods.setIcon(bmobfile);
                            goods.save(new SaveListener<String>() {
                                @Override
                                public void done(String s, BmobException e) {
                                    if (e == null) {
                                        Toast.makeText(AddActivity.this, "添加数据成功,:", Toast.LENGTH_SHORT).show();
                                        System.out.println("添加数据成功");
                                    } else {
                                        Toast.makeText(AddActivity.this, "添加数据失败", Toast.LENGTH_SHORT).show();
                                        System.out.println("添加数据失败");
                                    }
                                }
                            });
                        } else {
                            Toast.makeText(AddActivity.this, "文件上传失败", Toast.LENGTH_SHORT).show();
                            System.out.println("文件上传失败");
                        }
                    }
                });
                finish();
            }

        });
    }</span></span>

由于我的程序中设定用那个户上传的商品信息包括商品图片(BmobFile)、商品名称和描述(String)、商品价格(double),所以我先上传图片,通过取得的图片路径上传,用的是Bmob SDK中的upload()方法。文件上传成功后再上传商品的其他信息,调用sava()方法。上传之后能在表里面看到你上传的内容


二:数据查询和显示功能的实现

<span style="font-size:14px;">//获取数据
    private void loadDate() {
       
        BmobQuery<Goods> bmobQuery = new BmobQuery<Goods>();
        bmobQuery.findObjects(new FindListener<Goods>() {  //按行查询,查到的数据放到List<Goods>的集合
            @Override
            public void done(List<Goods> list, BmobException e) {
                if (e == null){<span style="white-space:pre">	</span>
   //System.out.println("查询成功"+list.get(0).getName()+list.get(0).getPrice()+list.get(0).getDesc());
                    listView.setAdapter(new MyAdapter(GroundActivity.this , list));
                    }

                }
        });
    }</span>
查询我是按表的行来查询的,调用BmobQuery.findObjects()方法即可以实现,查询的结果是一个List<Object>的

集合,现在已经取得了数据,但是要显示数据还需要写一个适配器(Adapter)将数据放到adapter中显示出来,我在

这个地方走了很多弯路,试了很多中方法,终于还是成功了。下面是我的适配器的代码:

class MyAdapter extends BaseAdapter {
        private Context context ;
        private List<Goods> list;
        public MyAdapter(Context context, List<Goods> list){
            this.context = context;
            this.list = list;
        }

        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            return list.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            final ViewHolder viewHolder;
            if (convertView == null){
                String name;
                String desc;
                double price;
                BmobFile image;
                    name = list.get(position).getName();
                    desc = list.get(position).getDesc();
                    price = list.get(position).getPrice();
                    image = list.get(position).getIcon();
                    System.out.println(image.getFileUrl());
                LayoutInflater inflater = LayoutInflater.from(context);
                convertView = inflater.inflate(R.layout.item_layout, null);//实例化一个布局文件
                viewHolder = new ViewHolder();
                viewHolder.iv_img = (ImageView)convertView.findViewById(R.id.iv);
                viewHolder.tv_name = (TextView)convertView.findViewById(R.id.tv_name);
                viewHolder.tv_price = (TextView)convertView.findViewById(R.id.tv_price);
                viewHolder.tv_desc = (TextView)convertView.findViewById(R.id.tv_desc);
                convertView.setTag(viewHolder);
                //不能直接在主线程中进行从网络端获取图片,而需要单独开一个子线程完成从网络端获取图片
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        //根据表中图片的url地址来得到图片(Bitmap类型)
                        final Bitmap bitmap=getPicture(list.get(position).getIcon().getFileUrl());
                        try {
                            Thread.sleep(2000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        viewHolder.iv_img.post(new Runnable() {
                            @Override
                            public void run() {
                                System.out.println("*********************************");
                                viewHolder.iv_img.setImageBitmap(bitmap);//将图片放到视图中去
                            }
                        });
                    }
                }).start();
                viewHolder.tv_name.setText(name);
                viewHolder.tv_price.setText(String.valueOf(price));   //将double数据放到textView中
                viewHolder.tv_desc.setText(desc);

            }else {
                viewHolder = (ViewHolder) convertView.getTag();
            }
            return convertView;
        }
        class ViewHolder{
            ImageView iv_img;
            TextView tv_name;
            TextView tv_price;
            TextView tv_desc;
        }
    }
我得到图片是 先通过 list.get(position).getIcon().getFileUrl()来得到图

片的url地址,再根据url地址来得到图片,需要注意的是通过url地址获得图片,和将图片放到view

视图中这两个工作需要放到一个子线程里面去,否则就会报错(我也不太了解),通过URL地址来得到

图片的方法如下:

public Bitmap getPicture(String path){
        Bitmap bm=null;
        try{
            URL url=new URL(path);
            URLConnection connection=url.openConnection();
            connection.connect();
            InputStream inputStream=connection.getInputStream();
            bm= BitmapFactory.decodeStream(inputStream);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  bm;
    }
至此基本上就算是大功告成了。希望对大家有帮助。

完整工程下载:链接:http://pan.baidu.com/s/1eSDPL30 密码:uqev

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用Bmob实现用户数据添加和查询显示 的相关文章

  • oracle中游标详细用法

    游标的概念 游标是SQL的一个内存工作区 xff0c 由系统或用户以变量的形式定义 游标的作用就是用于临时存储从数据库中提取的数据块 在某些情况下 xff0c 需要把数据从存放在磁盘的表中调到计算机内存中进行处理 xff0c 最后将处理结果
  • ckeditor 缺少图像源文件地址

    ckeditor 上传服务器 回显示js代码 javaweb整合ckeditor做上传图片的功能 xff0c 图片上传到tomcat服务器成功了 xff0c 但是没有跳转到到预览框里去 xff0c 却在原先的页面显示出这段js代码 xff1
  • centos7通过yum安装JDK1.8

    centos7通过yum安装JDK1 8 安装之前先检查一下系统有没有自带open jdk 命令 xff1a rpm qa grep java rpm qa grep jdk rpm qa grep gcj 如果没有输入信息表示没有安装 如
  • RenderThread线程报错记录

    RenderThread线程报错是很蛋疼的 xff0c 它是属于native报错 xff0c 而且还会有各种情况 04 23 16 31 38 343 17895 17895 F DEBUG 04 23 16 31 38 344 17895
  • 【Cocos2d-x】Win7+ vs2012,2010 + Cocos2d-x2.2 配置Cocos2d-X项目-环境

    新安装搭建cocos2d X的跳过这里 xff0c 看下面红色开始 xff1a cocos2d x删除vs2012项目模板 这一步新使用cocos2d x的不需要 如果你切换cocos2d x版本的话 xff0c 要将之前版本的vs模板删除
  • 【Cocos2d-x】Cocos2d-x参考案例源码解析之一:Cocos2dx各个文件说明

    这里本人电脑配置是win7 64位 xff0c cocos2d x2 20 xff0c VS2012 1 xff1a 首先当然是下载cocos2d x啦 我采用的是2 20版本 说明 xff1a 2 14以后的版本和之前的VS模板生成和环境
  • 【Cocos2d-x】Cocos2d-x参考案例源码解析之三:HelloWorld

    允许我讲些与源码无关的事情 xff01 稍后K我 由于cocos2dX3 0快出来了 xff0c 官网上说放弃objective c风格 xff0c 本屌学的是C 43 43 xff0c 所以真是太高兴了 xff0c 所以放慢的源码解析 x
  • 【Cocos2d-x】Cocos2d-x跨Android平台搭建之四:Win7 64位+ eclipse + cocos2dX

    开始研究cocos2dx xff0c mark一下这个的配置步骤 1 下载eclipse 2 下载android sdk xff0c 配置sdk路径 xff0c 添加环境变量 3 安装adt 4 下载android ndk xff0c 配置
  • 【网络通信】Wince 和 PC 通过USB 用Socket 进行通信

    网上资料比较少或者说讲的不太详细 xff0c 现在进行总结下 xff0c 刚毕业没接触过WINce xff0c 不过和MFC差不多 xff0c 现在进入正题 刚开始我的疑惑是Wince是如何和PC进行通信的 xff0c 以及能在USB模式下
  • 设备树学习之(十二)LCD驱动

    开发板 xff1a tiny4412SDK 43 S702 43 4GB Flash 要移植的内核版本 xff1a Linux 4 4 0 xff08 支持device tree xff09 u boot版本 xff1a 友善之臂自带的 U
  • 如何用ASCII码表白

    前提摘要 刚好学到了字符流输入输出那块东西 xff0c 从文本文档里敲入老师课件里的东西 xff0c 控制台 输出了对应的数字编码 xff0c 就萌生了 xff1a 嗯 可以用来表白的小想法 xff0c 就是把一对酷酷的扔 过去 xff0c
  • Android开发 使用广播实现每一分钟记录一次电量。

    最近项目要求每一分钟记录一次手机的电量来统计手机的耗电量 xff0c 这个就简单地使用广播来实现 广播类如下 xff1a span class token keyword package span span class token name
  • linux编程综合案例(生产者消费者问题)

    linux编程综合案例 生产者消费者问题 前面一系列练习已经把进程控制 线程 进程间通信的大概知识过了一遍 xff0c 现在进入综合练习 xff0c 首先练习经典问题 xff1a 生产者和消费者问题 xff08 不要问我前面一系列到底是个什
  • Spring整合Activemq中的DefaultMessageListenerContainer

    当我们Spring整合ActiveMQ后 消费端会注册消息监听消息 这时候一般会使用DefaultMessageListenerContainer xff08 父类 xff1a AbstractPollingMessageListenerC
  • DDR3的位宽和容量计算

    DDR3的位宽在芯片手册里的说法是Configuration xff0c 其位宽就是DDR3芯片DQ管脚的数量 xff0c 即I O接口位宽 另外推荐这篇文章DDR扫盲 DDR中的名词解析 DDR3中一个基本的概念是BANK xff0c 很
  • Windows10的WiFi功能不能用的解决办法

    昨天我的电脑WiFi突然连不上了 xff0c 点开电脑右下脚的网络连接图标 xff0c 大概如图1这个样子 xff0c 下面没有了WiFi这个选项 图1 图片来自网络 这个问题以前也出现过 xff0c 有时是开机连不上WiFi xff0c
  • DC-DC电路中通过串联电阻来增加陶瓷电容的ESR从而替代钽电容。

    相比钽电容 xff0c 片状多层陶瓷电容器的优点是封装尺寸小 价格低 可靠性高 无极性要求 ESR低 而一些开关电源 xff08 DC DC xff09 和线性电源 xff08 LDO等 xff09 的输出电容对ESR有要求 xff0c 要
  • OrCAD关闭start page

    打开原理图工具 Orcad Capture CIS 时 xff0c 总是会弹出startpage 页面 xff0c 有时候感觉这个东西挺碍事的 xff0c 于是找到了一个关闭它的方法 解决方法如下 xff1a 打开Command Windo
  • ERROR(ORPSIM-15108): Subcircuit 2SA1586 used by X_Q3067 is undefined

    自己在网上下载了个东芝的PNP三极管2SA1586 xff0c 添加到Capture的器件库里 xff0c 画了个图用Pspice AD仿真时 xff0c 出现了这个错误 xff0c 解决方法 xff1a You need to add t
  • 收录一些有用的网站或者在线工具

    Processon在线流程图 xff1a https www processon com GeoGebra数学应用 xff1a https www geogebra org 虚拟钢琴 xff1a https virtualpiano net

随机推荐