2017-09-17 1 views
0

複数のRest APIをシーケンスで呼び出し、各Response Dtoが互いに異なるようにしたいとします。Rx Java Android複数のapiをシーケンス内で呼び出して各結果を保存する必要があります

AndroidでRx Java Observablesを使用してこれらのApiを呼び出すにはどうすればよいですか。同じシナリオで

+0

あなたはこのソリューションは、私のために有用である、複数の観測を取り、 – Payal

+0

おかげでそれらの配列を連結し、連結演算子を使用することができます。 –

答えて

0

、私は複数の観測を取り、応答シーケンスが、あなたはまた、Merge演算子を使用することができます必要としない場合は、その配列

を連結し、連結演算子を使用しています。

Concat VS Merge operaror

0

いいえ、あなたはmap()doOnNext()を使用する必要があり、観察可能のdoOnNext()またはmap()方法を試してみて、各応答の同期​​を使用し、それらをさらに

+0

'' 'doOnNext()' ''や '' 'map()' ''を使わないのはなぜですか? AndroidでRx Javaを使用したRetrofitの '' 'doOnNext()' 'がなくても、' '' '' execute() 'の後に '' '' api.uploadImage(pref.getAuthToken()、screenshot)ドット演算子の後に ''は表示されません。 –

+0

答えがかなり大きいコメントになった、私はスレッドで完全な答えを与えた –

1

を渡し、それがこの

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); 
    }) 
のようになります。
0

まず、ネットワーク要求では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() 
} 
関連する問題