2017-11-04 1 views
0

2つのネットワーク要求、N1とN2を作成しています。これらは互いに依存しない2つの別々の要求です。RxJava、2つの観測値を結合して2番目の観測値を出力する

N1

Observable<GenresListResponse> genresListResponseObservable = 
      tmdbInterface.getGenresList(BuildConfig.API_KEY); 

N2

Observable<NowPlayingMoviesListResponse> nowPlayingMoviesListResponseObservable = 
      tmdbInterface.getNowPlayingMovies(BuildConfig.API_KEY); 

私は両方の応答を取得したら、私は今のジャンルリストから動画を再生する各ジャンルを見つけるとするジャンルを設定する必要があります今再生しているムービーリストの各項目。最後に、Observable NowPlayingMoviesListResponseを発行します。ここには、Stringとしてのジャンルが含まれています。

NowPlayingMoviesList POJOクラスには、genresListから推測された後にジャンルを設定するために使用できるsetGenre(String genre)が含まれています。

わかりやすくするために、これはサーバーからのJSON値です。

genre.json

{ 
    "genres": [ 
     { 
      "id": 28, 
      "name": "Action" 
     }, 
     { 
      "id": 12, 
      "name": "Adventure" 
     } 
    ] 
} 

now_playing_movie.json

{ 
    "results": [ 
     { 
      "vote_count": 3290, 
      "id": 346364, 
      "original_language": "en", 
      "original_title": "It", 
      "genre_ids": [ 
       18, 
       27, 
       53 
      ] 
     } 
    ] 
} 

は今、映画のモデルクラスでは、私がの応答でIDを比較した後のジャンルを設定しsetGenres(文字列のジャンルを)持っていますジャンルリクエスト。

+1

あなたが探しているのはジップオペレータです。実装について見てみましょう:https://github.com/Fakher-Hakim/Rx-Android-Samples/blob/master/app/src/main/java/com/fakher/rx/ui/fragments/ZipOperatorFragment.java – Fakher

+0

私のユースケースをZipで解決しました。私の答えは、@ charlag_khanです。 –

答えて

1

Observableストリームを複数待機する方法は複数あります。 すべてのストリームが要素を放出したときにのみ放出したい場合は、Zipという演算子があります。すべてのストリームが少なくとも1回は放射するのを待っていたいが、その後はすべての放射が最後の値でトリガーされたい場合は、CombineLatest演算子があります。

私の知る限り、ストリームはそれぞれ1回しか出ないので、Zipが必要です。あなたのストリームをSingleにすることをお勧めします(現代の改造アダプタはこれを行います)。

関連する問題