android – 如何管理并行和串行Retrofit API调用

我在同一个活动中有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 = {})
上一篇:宣布与 NBC 合作直播索契冬季奥运


下一篇:Android判断网络是否已经连接