我们在使用Retrofit +Rxjava 请求时,经常会遇到 在服务器中请求多个接口的情况下。而且请求之间一般还有依赖关系
比如 请求接口一 : 请求id
请求接口二 :需要请求接口一得到的id 再去请求别的数据;
在这里需要使用的Rxjava 的操作符 flatMap
具体如下:
RetrofitClient.getHomeApi().getTime("name")
.flatMap(new Func1<TimerBean, Observable<GoodsDetailBean>>() {
@Override
public Observable<GoodsDetailBean> call(TimerBean timerBean) {
int products_id= timerBean.getData();
return RetrofitClient.getHomeApi().getGoodsDetail(products_id);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<GoodsDetailBean>() {
@Override
public void call(GoodsDetailBean goodsDetailBean) {
dismissLoading();
if (goodsDetailBean.getStateCode() == 0) {
if (goodsDetailBean.getData() != null) {
data = goodsDetailBean.getData();
setData(data);
}
}
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
dismissLoading();
}
});
其中注意
.observeOn(AndroidSchedulers.mainThread()) // 不是subcribeOn(AndroidSchedulers.mainThread())
关于请求的解释:
.flatMap(new Func1<TimerBean, Observable<GoodsDetailBean>>() { //TimerBean 为第一个请求返回的bean 第二个 Observable<GoodsDetailBean> 为第二个请求需要的数据
return RetrofitClient.getHomeApi().getGoodsDetail(products_id); // 获取到第一个请求数据 return 将数据传送给第二个 请求
网友评论