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()
}
我想在序列中调用多个 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()
}