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

时间:2017-11-04 16:42:35

标签: android rx-java rx-android

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

N1

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

N2

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

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

NowPlayingMoviesList POJO类包含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
             ]
        }
    ]
}

现在在电影模型类中,我有setGenres(字符串类型),它在将ids与类型请求的响应进行比较后设置类型。

1 个答案:

答案 0 :(得分:1)

有多种方法可以等待多个Observable流。 如果你想只在每个流发出元素时发光 - 那么就有一个Zip运算符。如果你想要等待所有的流至少发出一次但是之后你希望每个发射都用最后的值触发 - 那就是CombineLatest运算符。

据我所知,你的每个流只发出一次,所以我想你需要Zip。我还建议你制作你的溪流Single(现代的改造适配器这样做)。