我在同一个活动中有4个API调用.其中3个是相互独立的.我想在前三个完成后拨打4号,我不确定每次执行前3个.我从数据库中获取数据然后它将调用.它可以是1个API调用,也可以是前三个中的2个或3个.
我试图顺序呼叫,但有时候在前3个完成之前开始4号.我的一些努力如下:
if(true){ // data 1 is available in database
firstRetrofitCall();
}else{
//show no data
}
if(true){ // data 2 is available in database
secondRetrofitCall();
}else{
//show no data
}
if(true){ // data 3 is available in database
thirdRetrofitCall();
}else{
//show no data
}
fourthRetrofitCall(); // I would like to execute this after first three finished
是否可以使用RxJava进行管理?
解决方法:
使用Rxjava2适配器和Retrofit然后你可以使用Rxjava的zip运算符来组合前三个调用(假设你的调用分别返回X,Y,Z值,XYZwrapper只是这些的容器)然后使用flatMap运算符进行第四次调用.
Single.zip(
firstRetrofitCall(),
secondRetrofitCall(),
thirdRetrofitCall(),
Function3<X, Y, Z, XYZwrapper> { x, y, z -> return@Function3 XYZwrapper(x, y, z) }
)
.subscribeOn(Schedulers.io())
.flatMap { XYZwrapper -> fourthRetrofitCall().subscribe() }//chaining
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy( one rror = {}, onSuccess = {})