複数のRest APIをシーケンスで呼び出し、各Response Dtoが互いに異なるようにしたいとします。Rx Java Android複数のapiをシーケンス内で呼び出して各結果を保存する必要があります
AndroidでRx Java Observablesを使用してこれらのApiを呼び出すにはどうすればよいですか。同じシナリオで
複数のRest APIをシーケンスで呼び出し、各Response Dtoが互いに異なるようにしたいとします。Rx Java Android複数のapiをシーケンス内で呼び出して各結果を保存する必要があります
AndroidでRx Java Observablesを使用してこれらのApiを呼び出すにはどうすればよいですか。同じシナリオで
、私は複数の観測を取り、応答シーケンスが、あなたはまた、Merge演算子を使用することができます必要としない場合は、その配列
を連結し、連結演算子を使用しています。
いいえ、あなたはmap()
やdoOnNext()
を使用する必要があり、観察可能のdoOnNext()
またはmap()
方法を試してみて、各応答の同期を使用し、それらをさらに
'' 'doOnNext()' ''や '' 'map()' ''を使わないのはなぜですか? AndroidでRx Javaを使用したRetrofitの '' 'doOnNext()' 'がなくても、' '' '' execute() 'の後に '' '' api.uploadImage(pref.getAuthToken()、screenshot)ドット演算子の後に ''は表示されません。 –
答えがかなり大きいコメントになった、私はスレッドで完全な答えを与えた –
を渡し、それがこの
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そこには常に1つのアイテムしかありません。あるリクエストから別のリクエストに切り替えるには、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
おかげでそれらの配列を連結し、連結演算子を使用することができます。 –