Rx Java Android需要调用多个api';按顺序排序并保存每个结果

Rx Java Android需要调用多个api';按顺序排序并保存每个结果,android,rx-java,retrofit2,rx-java2,Android,Rx Java,Retrofit2,Rx Java2,我想在一个序列中调用多个RESTAPI,并且每个响应Dto都是不同的 请帮助我摆脱这种情况,我如何在Android中使用Rx Java Observable调用这些Api。对于相同的场景,我使用concat操作符,它获取多个Observable并连接它们的序列 若响应序列不需要,那个么您也可以使用合并操作符 尝试doOnNext()或map()可观察的方法,并对每个响应使用syncexecute(),并进一步传递它们不,您应该使用map()或doOnNext(),看起来是这样的 Observab

我想在一个序列中调用多个RESTAPI,并且每个响应Dto都是不同的


请帮助我摆脱这种情况,我如何在Android中使用Rx Java Observable调用这些Api。

对于相同的场景,我使用concat操作符,它获取多个Observable并连接它们的序列

若响应序列不需要,那个么您也可以使用合并操作符


尝试
doOnNext()
map()
可观察的方法,并对每个响应使用sync
execute()
,并进一步传递它们

不,您应该使用
map()
doOnNext()
,看起来是这样的

Observable.just(1)
    .doOnNext(value -> {
        someRequestX().execute();    
    })
    .map(value -> {
        return nextRequestY().execute();    
    })
    .doOnNext(requestYResponse-> {
        someRequesZ(requestYResponse.someValue).execute();    
    })
    .map(requestYResponse-> {
        return someRequesK(requestYResponse.someValue).execute();    
    })
    .map(requestKResponse -> {
        return someRequesJ(requestKResponse.someValue).execute();    
    })
    .subscribe(requestJResponse -> {
       doSOmethingWithFinalResponse(requestJResponse );
    })

首先,对于网络请求,最好使用
单个
,然后使用
可观察的
,因为总是只有一个项目。要从一个请求切换到另一个请求,可以使用
flatMap

假设您的代码类似,您可以尝试以下方法:

class Dto1 {}

class Dto2 {}

class Dto3 {}

public interface Api {

    Single<Dto1> getDto1();

    Single<Dto2> getDto2();

    Single<Dto3> getDto3();
}

private Api api;

public void callApi() {
    api.getDto1()
            .doOnSuccess(dto1 -> {/*do something with dto1*/})
            .flatMap(dto1 -> api.getDto2())
            .doOnSuccess(dto2 -> {/*do something with dto2*/})
            .flatMap(dto2 -> api.getDto3())
            .doOnSuccess(dto3 -> {/*do something with dto3*/})
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe()
}
类Dto1{}
类Dto2{}
类Dto3{}
公共接口Api{
单getDto1();
单getDto2();
单getDto3();
}
私人Api;
public void callApi(){
api.getDto1()
.doOnSuccess(dto1->{/*使用dto1*/}执行某些操作)
.flatMap(dto1->api.getDto2())
.doOnSuccess(dto2->{/*使用dto2*/}做点什么)
.flatMap(dto2->api.getDto3())
.doOnSuccess(dto3->{/*用dto3*/}做点什么)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe()
}

您可以使用concat运算符,它获取多个观察值并连接它们的序列。这个解决方案对我很有帮助。请您解释一下,为什么不使用
doOnNext()
map()
?因为在安卓系统中改用Rx Java时,如果没有
doOnNext()
,我就没有其他选项了,例如
api.uploadImage(pref.getAuthToken(),屏幕截图)
之后,
execute()
在点运算符之后的任何选项中都不会显示。对于注释,答案变得相当大,我在线程中给出了完整的答案