RxJava和Retrofit - Rx的第一步

时间:2015-09-24 10:41:09

标签: android retrofit rx-java

使用RxJava(没有Retrolambda),我想做一些API调用并用它完成我的数据。我的不完整对象是一个'TvShow',其中有一个对象'Season'列表。这个“季节”是空的,我需要用剧集来完成它。

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'对象(确定)
  • 从我的'TvShow'对象中迭代季节(List&lt; \ Season&gt;)并为每个季节执行API调用以使我的赛季完全完成并更新列表中的“旧”赛季。
  • 然后,一旦我们拥有所需的一切,就将数据保存到数据库(订户部分)

到现在为止,我只有:

Observable<TvShow> = apiService.getDataTvShow(idTvShow)

我现在需要迭代季节,我尝试使用运算符'map'从'TvShow'对象切换到我的季节列表(tvShow.getSeasons())但是我不确定是好的方式。除此之外,我知道“doOnNext”将用于更新我的“旧”季节,就是这样。

我尝试使用这个好例子:Handling lists with RxJava and Retrofit in android但我仍然坚持:(

如果你可以帮助我解决这个问题,那就太棒了:)。

1 个答案:

答案 0 :(得分:3)

例如,您有两个可观察量:

Observable<Season> getSeason(int id)
Observable<TvShow> getTvShow(String id)

如何加载TvShow然后加载每个季节并填写TvShow:

  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;
                  })
      );