搜尋

首頁  >  問答  >  主體

android - 请求数据异步耗时操作如何返回?

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;
}
巴扎黑巴扎黑2772 天前682

全部回覆(6)我來回復

  • PHP中文网

    PHP中文网2017-04-17 17:33:24

    非同步請求不應該這樣寫回傳的,應該用回呼。
    寫個接口,在onSuccess裡面調用接口方法,然後使用的時候回調就可以

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:33:24

    建議你先學習一下回調這個知識點連結描述

    回覆
    0
  • PHPz

    PHPz2017-04-17 17:33:24

    如樓上所說,非同步任務用介面實現,在呼叫介面方法時最好處理下執行緒問題。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:33:24

    rxjava是不錯的選擇

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 17:33:24

    不懂你為什麼要重新包裝一遍,其實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回呼接口就好了!不用多此一舉! !

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 17:33:24

    1、在非同步線程中,進行耗時操作
    2、查詢結束後,可以用EventBus或RxBus發送訊息到主執行緒
    3、主執行緒接受event,然後進行刷新

    用樓上提到的RxJava

    回覆
    0
  • 取消回覆