Bmob查询获取内部类的数据

第一次写博客,主要还是想互相交流学习一下,自己写的app基本完成了,中间遇到 了很多问题,一直在网上百度求解答,有一个关于Bmob获取查询数据的问题曾经困扰了我很久,毕竟小白懂得也不多,这里分享一下,写的具体一点希望能对像我这样的android新手有所帮助,也请大家多多指教。


首先看一下Bmob官网给出的开发文档

BmobQuery<GameScore> query = new BmobQuery<GameScore>();
//查询playerName叫“比目”的数据
query.addWhereEqualTo("playerName", "比目");
//返回50条数据,如果不加上这条语句,默认返回10条数据
query.setLimit(50);
//执行查询方法
query.findObjects(this, new FindListener<GameScore>() {
        @Override
        public void onSuccess(List<GameScore> object) {
            // TODO Auto-generated method stub
            toast("查询成功:共"+object.size()+"条数据。");
            for (GameScore gameScore : object) {
               //获得playerName的信息
               gameScore.getPlayerName();
               //获得数据的objectId信息
               gameScore.getObjectId();
               //获得createdAt数据创建时间(注意是:createdAt,不是createAt)
               gameScore.getCreatedAt();
            }
        }
        @Override
        public void onError(int code, String msg) {
            // TODO Auto-generated method stub
            toast("查询失败:"+msg);
        }
});

这里Bmob为了方便我们的使用将查询到的数据都封装好了,但同时因为java内部类的设定,我们无法直接获取到list中对象的值,期间我也采取了很多办法,比如将所需要的值传递给全局变量。明面上不报错了,但是打印出log来确实空的,这让我很迷茫,后来百度了一下才知道BmobQuery是异步查询的方法,当你赋值给全局变量的时候要查询的值还没有查询出来,当然如果你java学的够好说什么回调出去也可以,但是我这样的渣对回调用的很少,基本不会用。这里我们介绍另一种方法Handler,它与子线程可以通过Message对象来传递数据

Handler

Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分在消息队列中逐一将消息取出,然后对消息进行处理,也就是发送消息和接收消息不是同步的处理。 这种机制通常用来处理相对耗时比较长的操作。


话不多说直接上代码

BmobQuery<plans> query=new BmobQuery<plans>();
query.addWhereEqualTo("name", name);
query.findObjects(new FindListener<plans>() {
     @Override
            public void done(List<plans> list, BmobException e) {
                if (e == null) {
                    Message message = handler.obtainMessage();
                    message.what = 0;
                    //以消息为载体
                    message.obj = list;//这里的list就是查询出list
                    //向handler发送消息
                    handler.sendMessage(message);

                } else {
                    Log.e("bmob", ""+e);
                }
            }
        });

这里和文档里方法稍有差异主要是文档里的是旧版本的BmobSDK
创建handler接受消息

 private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what){
                case 0:
                    List<plans> list= (List<plans>) msg.obj;
                    break;
            }

        }
    };

这样就完成了从BmobQuery内部类中将数据传递出来,希望对刚开始接触java和Bmob的小伙伴们有所帮助,也请大家多多指教。

  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值