Rxjava多網(wǎng)絡(luò)嵌套--mark

流式調(diào)用(比如先調(diào)用注冊--在調(diào)用登錄)

//以下實(shí)現(xiàn)多個網(wǎng)絡(luò)嵌套流式調(diào)用

/*      observable1=request.getCall();
       observable2=request.getCall_2();
       observable1.subscribeOn(Schedulers.io())               // (初始被觀察者)切換到IO線程進(jìn)行網(wǎng)絡(luò)請求1
       .observeOn(AndroidSchedulers.mainThread())  // (新觀察者)切換到主線程 處理網(wǎng)絡(luò)請求1的結(jié)果
       .doOnNext(new Consumer<Translation1>(){

@Override
public void accept(Translation1 result)throws Exception{
       Log.d(TAG,"第1次網(wǎng)絡(luò)請求成功");
       result.show();
       // 對第1次網(wǎng)絡(luò)請求返回的結(jié)果進(jìn)行操作 = 顯示翻譯結(jié)果
       }
       })

       .observeOn(Schedulers.io())                 // (新被觀察者,同時也是新觀察者)切換到IO線程去發(fā)起登錄請求
       // 特別注意:因?yàn)閒latMap是對初始被觀察者作變換,所以對于舊被觀察者,它是新觀察者,所以通過observeOn切換線程
       // 但對于初始觀察者,它則是新的被觀察者
       .flatMap(new Function<Translation1, ObservableSource<Translation2>>(){ // 作變換,即作嵌套網(wǎng)絡(luò)請求
@Override
public ObservableSource<Translation2> apply(Translation1 result)throws Exception{
       // 將網(wǎng)絡(luò)請求1轉(zhuǎn)換成網(wǎng)絡(luò)請求2,即發(fā)送網(wǎng)絡(luò)請求2
       return observable2;
       }
       })

       .observeOn(AndroidSchedulers.mainThread())  // (初始觀察者)切換到主線程 處理網(wǎng)絡(luò)請求2的結(jié)果
       .subscribe(new Consumer<Translation2>(){
@Override
public void accept(Translation2 result)throws Exception{
       Log.d(TAG,"第2次網(wǎng)絡(luò)請求成功");
       result.show();
       // 對第2次網(wǎng)絡(luò)請求返回的結(jié)果進(jìn)行操作 = 顯示翻譯結(jié)果
       }
       },new Consumer<Throwable>(){
@Override
public void accept(Throwable throwable)throws Exception{
       System.out.println("登錄失敗");
       }*/

組合調(diào)用--需要同時請求,然后將返回的結(jié)果更新UI

//多個網(wǎng)絡(luò)嵌套
       Observable placeObservable = repository.getPlaceList(context);
       Observable weatherObservable = ServiceManager.getInstance().getApiService().getWeatherInfo(place, Constants.BAIDU_AK);
       Observable.merge(placeObservable, weatherObservable)
               .subscribeOn(Schedulers.io())......

       public void onNext (Object obj){
           //多個請求返回的數(shù)據(jù)對象不一致,要分別判斷并反饋給前臺的UI
           if (obj instanceof List) {
               mMainView.setupPlaceData((List<Place>) obj);
           } else if (obj instanceof WeatherResponse) {
               mMainView.setupWeatherData((WeatherResponse) obj);
           }
       }

總結(jié):網(wǎng)絡(luò)嵌套是Rxjava強(qiáng)大功能中的一角,關(guān)鍵在熟練掌握提供的幾個操作符map 、flatmap、merge等

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 引入依賴: implementation 'io.reactivex.rxjava2:rxandroid:2.0....
    為夢想戰(zhàn)斗閱讀 1,338評論 0 0
  • 我從去年開始使用 RxJava ,到現(xiàn)在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的...
    Jason_andy閱讀 5,565評論 7 62
  • http://blog.csdn.net/yyh352091626/article/details/5330472...
    奈何心善閱讀 3,583評論 0 0
  • 最近項(xiàng)目里面有用到Rxjava框架,感覺很強(qiáng)大的巨作,所以在網(wǎng)上搜了很多相關(guān)文章,發(fā)現(xiàn)一片文章很不錯,今天把這篇文...
    Scus閱讀 6,894評論 2 50
  • rx任曦閱讀 141評論 1 0