前言
有时候会遇到在一个界面同时请求多个接口,最简单的办法就是各自请求,哪个调用成功了就先显示哪个,但是这个风险比较大
而且请求是异步的,如果对请求接口的先后顺序有要求的话这个办法就不适用了。
一个请求成功了再去请求另一个,这个方法虽然可以但是很明显能感觉出来这样写很不优雅,造成了嵌套逻辑,很容易造成逻辑上的问题
rxjava
项目中使用到了RxJava,这里简单讲解下如何使用rxjava同时请求多个接口或者连续请求接口
简单分下场景:
如果一个页面使用了几个不同的接口去获取数据然后显示,这个时候是同时请求多个接口
登录的时候会先请求登录接口,然后进首页再请求接口,这个时候可以连续调用接口
准备
作者这里使用了之前封装的一个网络请求框架 RxNetWork
先获取两个Observable,是两个一样的接口,这里为了区分,一个获取model,一个获取String
Observable> daily = RxNetWork.observable(Api.ZLService.class).getList("daily", 20, 0);
Observable dail2 = RxNetWork.observable(Api.ZLService.class).getObject("daily", 20, 0);
同时请求多个接口
这里可以使用 rxjava的merge操作符,这个合并操作符就是将多个Obsevable合并为一个,比较方便统一管理
这样的网络请求封装的过程现在网上一抓一大把,这里就不在叙说了,在这里,直接看结果。
将两个不同的Observable使用merge操作符合并起来,然后直接请求网络
Observable merge = Observable.merge(daily, dail2);
RxNetWork.getInstance().getApi(merge, new RxNetWorkListener() {
@Override
public void onNetWorkStart() {
KLog.i("onNetWorkStart");
}
@Override
public void onNetWorkError(Throwable e) {
KLog.i("onNetWorkError");
}
@Override
public void onNetWorkComplete() {
KLog.i("onNetWorkComplete");
<