RxJava,结合两个可观察对象并发出第二个可观察对象

RxJava, combining two observables and emitting second observable

我正在发出两个网络请求,比如 N1 和 N2。这是两个相互独立的请求。

N1

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

N2

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

一旦得到两者的响应,我需要从流派列表中找到每部正在播放的电影的流派,并将流派设置为正在播放的电影列表中的每个项目。最后,发出 Observable NowPlayingMoviesListResponse,它现在包含类型作为字符串。

NowPlayingMoviesList POJO class 包含 setGenre(String genre) 从 genresList 推导出后可用于设置类型。

为了更好地理解,这是来自服务器的 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
             ]
        }
    ]
}

现在在电影模型 class 中,我有 setGenres(String genre),它在将 id 与流派请求的响应进行比较后设置流派。

有多种方法可以等待多个 Observable 流。 如果您只想在每个流发出元素时发出 - 那么有一个 Zip operator. If you want to wait for all your streams to emit at least once but after then you want every emission to trigger with the last values - there's a CombineLatest 运算符。

据我所知,您的每个流只发出一次,所以我猜您需要 Zip。我还建议您制作流 Single(现代 Retrofit 适配器会这样做)。