第一次写博客,主要还是想互相交流学习一下,自己写的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的小伙伴们有所帮助,也请大家多多指教。