Rx Java Android需要调用多个api';按顺序排序并保存每个结果
我想在一个序列中调用多个RESTAPI,并且每个响应Dto都是不同的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
请帮助我摆脱这种情况,我如何在Android中使用Rx Java Observable调用这些Api。对于相同的场景,我使用concat操作符,它获取多个Observable并连接它们的序列 若响应序列不需要,那个么您也可以使用合并操作符
尝试
doOnNext()
或map()
可观察的方法,并对每个响应使用syncexecute()
,并进一步传递它们不,您应该使用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()
在点运算符之后的任何选项中都不会显示。对于注释,答案变得相当大,我在线程中给出了完整的答案