我想在一個序列中調用多個Rest Api,並讓每個響應Dto彼此不同。Rx Java Android需要在一個序列中調用多個api並保存每個結果
請幫我擺脫這種情況,我怎樣才能在Android中調用這些Api使用Rx Java Observables。
我想在一個序列中調用多個Rest Api,並讓每個響應Dto彼此不同。Rx Java Android需要在一個序列中調用多個api並保存每個結果
請幫我擺脫這種情況,我怎樣才能在Android中調用這些Api使用Rx Java Observables。
嘗試的可觀doOnNext()
或map()
方法和使用同步每個響應的,並進一步通過他們
你能解釋一下,爲什麼不使用'''doOnNext()'''''map()'''?因爲在使用Rx Java進行Retrofit改造時,如果沒有''''doOnNext()''',''''''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
,bec因爲總是隻有一個項目。要從一個請求切換到另一個請求,您可以使用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()
}
可以使用毗連運算這需要多個觀測量並連接它們的序列 – Payal
謝謝,這個解決方案對我來說是有幫助的。 –