Rxjava多网络嵌套--mark

流式调用(比如先调用注册--在调用登录)

//以下实现多个网络嵌套流式调用

/*      observable1=request.getCall();
       observable2=request.getCall_2();
       observable1.subscribeOn(Schedulers.io())               // (初始被观察者)切换到IO线程进行网络请求1
       .observeOn(AndroidSchedulers.mainThread())  // (新观察者)切换到主线程 处理网络请求1的结果
       .doOnNext(new Consumer<Translation1>(){

@Override
public void accept(Translation1 result)throws Exception{
       Log.d(TAG,"第1次网络请求成功");
       result.show();
       // 对第1次网络请求返回的结果进行操作 = 显示翻译结果
       }
       })

       .observeOn(Schedulers.io())                 // (新被观察者,同时也是新观察者)切换到IO线程去发起登录请求
       // 特别注意:因为flatMap是对初始被观察者作变换,所以对于旧被观察者,它是新观察者,所以通过observeOn切换线程
       // 但对于初始观察者,它则是新的被观察者
       .flatMap(new Function<Translation1, ObservableSource<Translation2>>(){ // 作变换,即作嵌套网络请求
@Override
public ObservableSource<Translation2> apply(Translation1 result)throws Exception{
       // 将网络请求1转换成网络请求2,即发送网络请求2
       return observable2;
       }
       })

       .observeOn(AndroidSchedulers.mainThread())  // (初始观察者)切换到主线程 处理网络请求2的结果
       .subscribe(new Consumer<Translation2>(){
@Override
public void accept(Translation2 result)throws Exception{
       Log.d(TAG,"第2次网络请求成功");
       result.show();
       // 对第2次网络请求返回的结果进行操作 = 显示翻译结果
       }
       },new Consumer<Throwable>(){
@Override
public void accept(Throwable throwable)throws Exception{
       System.out.println("登录失败");
       }*/

组合调用--需要同时请求,然后将返回的结果更新UI

//多个网络嵌套
       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){
           //多个请求返回的数据对象不一致,要分别判断并反馈给前台的UI
           if (obj instanceof List) {
               mMainView.setupPlaceData((List<Place>) obj);
           } else if (obj instanceof WeatherResponse) {
               mMainView.setupWeatherData((WeatherResponse) obj);
           }
       }

总结:网络嵌套是Rxjava强大功能中的一角,关键在熟练掌握提供的几个操作符map 、flatmap、merge等

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 引入依赖: implementation 'io.reactivex.rxjava2:rxandroid:2.0....
    为梦想战斗阅读 1,344评论 0 0
  • 我从去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的...
    Jason_andy阅读 5,570评论 7 62
  • http://blog.csdn.net/yyh352091626/article/details/5330472...
    奈何心善阅读 3,585评论 0 0
  • 最近项目里面有用到Rxjava框架,感觉很强大的巨作,所以在网上搜了很多相关文章,发现一片文章很不错,今天把这篇文...
    Scus阅读 6,895评论 2 50
  • rx任曦阅读 141评论 1 0