android - 请求数据异步耗时操作如何返回?
巴扎黑
巴扎黑 2017-04-17 17:31:24
0
6
686
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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板