Retrofit +Rxjava 操作符之链式请求

我们在使用Retrofit +Rxjava 请求时,经常会遇到 在服务器中请求多个接口的情况下。而且请求之间一般还有依赖关系

比如 请求接口一 : 请求id

请求接口二 :需要请求接口一得到的id 再去请求别的数据;

在这里需要使用的Rxjava 的操作符 flatMap

具体如下:

  RetrofitClient.getHomeApi().getTime("name")
                .flatMap(new Func1>() {
                    @Override
                    public Observable call(TimerBean timerBean) {
                          int products_id= timerBean.getData();
                         return  RetrofitClient.getHomeApi().getGoodsDetail(products_id);
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1() {
                    @Override
                    public void call(GoodsDetailBean goodsDetailBean) {
                        dismissLoading();
                        if (goodsDetailBean.getStateCode() == 0) {
                            if (goodsDetailBean.getData() != null) {
                                data = goodsDetailBean.getData();
                                setData(data);

                            }
                        }
                    }
                }, new Action1() {
                    @Override
                    public void call(Throwable throwable) {
                        dismissLoading();

                    }
                });

其中注意

 .observeOn(AndroidSchedulers.mainThread())  // 不是subcribeOn(AndroidSchedulers.mainThread())

关于请求的解释:

 .flatMap(new Func1>() {  //TimerBean 为第一个请求返回的bean   第二个 Observable 为第二个请求需要的数据


  return  RetrofitClient.getHomeApi().getGoodsDetail(products_id);  // 获取到第一个请求数据 return 将数据传送给第二个 请求

你可能感兴趣的:(Retrofit +Rxjava 操作符之链式请求)