使用 RxJava(不带 Retrolambda),我想进行一些 API 调用并用它来完成我的数据。我的不完整对象是一个“电视节目”,其中包含对象“季节”列表。这个“季节”是空的,我需要用剧集来完成它。
Observable<TvShow> getDataTVShow(long idTvShow)
//get TvShow with empty seasons (except season number)
Observable<Season> getDataSeason(long idTvShow, int seasonNumber);
//get one complete season with episodes
所以我想:
- 获取我的“TvShow”对象(OK)
- 从我的“TvShow”对象迭代季节(列表 ),并为每个季节执行 API 调用,以使我的季节完全完成并更新列表中的“旧”季节。
- 然后,一旦我们拥有了所需的一切,将数据保存到数据库中(订阅者部分)
到目前为止,我只有:
Observable<TvShow> = apiService.getDataTvShow(idTvShow)
我现在需要迭代季节,我尝试使用运算符“map”从“TvShow”对象切换到我的季节列表(tvShow.getSeasons()),但我不确定是否正确。除此之外,我知道“doOnNext”将用于更新我的“旧”季节,仅此而已。
我尝试使用这个很好的例子:在 android 中使用 RxJava 和 Retrofit 处理列表 https://stackoverflow.com/questions/27693425/handling-lists-with-rxjava-and-retrofit-in-android但我还是被困住了:(
如果你能帮我解决这个问题,那就太好了:)
例如,您有两个可观察量:
Observable<Season> getSeason(int id)
Observable<TvShow> getTvShow(String id)
电视节目然后加载每个季节和秋季电视节目的声音大小:
Observable<TvShow> getFilledTvShow = getTvShow("123")
.flatMap(tvShow ->
//make stream observable from seasons
Observable.from(tvShow.seasons)
//load each season from network
.flatMap(season -> getSeason(season.id))
//then collect all results to ArrayList
.collect(() -> new ArrayList<Season>(),
(seasons, filledSeason) -> seasons.add(filledSeason))
//finally fill tvShow and return it
.map(filledSeasons_ -> {
tvShow.seasons = filledSeasons_;
return tvShow;
})
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)