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 适配器会这样做)。
我正在发出两个网络请求,比如 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 适配器会这样做)。