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

Rx Java Android Needs to call multiple api's in a sequence and save each results

我想在序列中调用多个 Rest Api,并且每个 Response Dto 彼此不同。

请帮助我摆脱这种情况,我如何在 Android.

中使用 Rx Java Observables 调用这些 Api

对于相同的场景,我使用 concat 运算符,它接收多个 Observable 并连接它们的序列

如果不需要响应序列,那么您也可以使用合并运算符。

尝试 doOnNext()map() Observable 方法并使用每个响应的同步 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 );
    })

首先,对于网络请求,最好使用Single然后Observable,因为总是只有一个项目。要从一个请求切换到另一个请求,您可以使用 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()
}