android - 请求数据异步耗时操作如何返回?
巴扎黑
巴扎黑 2017-04-17 17:31:24
0
6
687
public List<QiangYu> load() {
    BmobQuery<QiangYu> query = new BmobQuery<QiangYu>();

    query.findObjects(UiUtils.getContext(), new FindListener<QiangYu>() {

        @Override
        public void onSuccess(List<QiangYu> list) {
            //这个list是不为空的.我想问的是如何把这个list数据在load方法中返回出去.
            //因为耗时.这样直接返回是null.
            
            } 
        }

        @Override
        public void onError(int arg0, String arg1) {
        };
    });

    //因为onSuccess耗时.这样写,会直接返回null
    //有什么办法,可以让onSuccess完成,获取好数据在返回???
    return list;
}
巴扎黑
巴扎黑

全部回复(6)
洪涛

异步请求不应该这样写返回的,应该用回调。
写个接口,在onSuccess里面调用接口方法,然后使用的时候回调就可以

伊谢尔伦

建议你先学习一下回调这个知识点链接描述

PHPzhong

如楼上所说,异步任务用接口实现,在调用接口方法时最好处理下线程问题。

伊谢尔伦

rxjava是个不错的选择

小葫芦

不明白你为什么要重新包装一遍,其实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回调接口就好了!不用多此一举!!

小葫芦

1、在异步线程中,进行耗时操作
2、查询结束后,可以用EventBus或者RxBus发送消息到主线程
3、主线程接受event,然后进行刷新
或者
用楼上提到过的RxJava

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板