问题描述
public List<QiangYu> load() { BmobQuery<QiangYu> query = new BmobQuery<QiangYu>(); query.findObjects(UiUtils.getContext(), new FindListener<QiangYu>() {@Overridepublic void onSuccess(List<QiangYu> list) { //这个list是不为空的.我想问的是如何把这个list数据在load方法中返回出去. //因为耗时.这样直接返回是null.} }@Overridepublic void onError(int arg0, String arg1) {}; }); //因为onSuccess耗时.这样写,会直接返回null //有什么办法,可以让onSuccess完成,获取好数据在返回??? return list;}
问题解答
回答1:异步请求不应该这样写返回的,应该用回调。写个接口,在onSuccess里面调用接口方法,然后使用的时候回调就可以
回答2:建议你先学习一下回调这个知识点链接描述
回答3:如楼上所说,异步任务用接口实现,在调用接口方法时最好处理下线程问题。
回答4:rxjava是个不错的选择
回答5:不明白你为什么要重新包装一遍,其实Bmob都封装好了的,你有需要的话,就写一个接口回调
public getListListener gll;//接口public interface getListListener{ void onSucceed(List<data>);}public void load(final getListListener gll){this.gll=gll; ... ... Bmob.find(new findListener(){ void onSucceed(List<data> data){ //回调方法 gll.onsucceed(data);}... });}//使用:load(new getListListener(){ void onSuccees(list<data> data){//得到数据//写你自己的逻辑. }});
经过上面。。。你会发现并没有什么用。。。所以说接口使用Bmob回调接口就好了!不用多此一举!!
回答6:1、在异步线程中,进行耗时操作2、查询结束后,可以用EventBus或者RxBus发送消息到主线程3、主线程接受event,然后进行刷新或者用楼上提到过的RxJava

