Android RxJava和改装-Rx的第一步
有了RxJava(没有Retrolambda),我想做一些API调用并用它完成我的数据。我的不完整对象是一个带有对象“季节”列表的“电视节目”。这个“季节”是空的,我需要用剧集来完成它Android RxJava和改装-Rx的第一步,android,retrofit,rx-java,Android,Retrofit,Rx Java,有了RxJava(没有Retrolambda),我想做一些API调用并用它完成我的数据。我的不完整对象是一个带有对象“季节”列表的“电视节目”。这个“季节”是空的,我需要用剧集来完成它 Observable<TvShow> getDataTVShow(long idTvShow) //get TvShow with empty seasons (except season number) Observable<Season> getDataSeason(long idT
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
可观察的getDataTVShow(长idTvShow)
//获取空季的电视节目(季号除外)
可观测的getDataSeason(长idTvShow,整数);
//获得一个完整的剧集季
所以我想:
- 获取我的“TvShow”对象(确定)
- 从我的“TvShow”对象迭代季节(列表),并为每个季节执行API调用,以完全完成我的季节并更新列表中的“旧”季节李>
- 然后,一旦我们拥有了所需的一切,就将数据持久化到数据库中(订户部分)
Observable<TvShow> = apiService.getDataTvShow(idTvShow)
Observable=apiService.getDataTvShow(idTvShow)
我现在需要迭代季节,我尝试使用操作符“map”从“TvShow”对象切换到我的季节列表(TvShow.getSeasons()),但我不确定是否有好的方法。除此之外,我知道“doOnNext”将用于更新我的“旧”赛季,仅此而已
我试着用这个好例子:但我还是被卡住了:(
如果你能帮我解决这个问题,那就太好了:)例如,你有两个观测值:
Observable<Season> getSeason(int id)
Observable<TvShow> getTvShow(String id)
可观察的getSeason(int id)
可观察的getTvShow(字符串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;
})
);
Observable getFilledTvShow=getvshow(“123”)
.flatMap(电视节目->
//使河流从季节上可见
可观察。来自(电视节目。季节)
//从网络中加载每个季节
.flatMap(季节->获取季节(季节id))
//然后将所有结果收集到ArrayList
.collect(()->new ArrayList(),
(季节,填充季节)->季节。添加(填充季节))
//最后填写电视节目并返回
.map(已填充的季节){
tvShow.seasures=已填充的seasures;
返回电视节目;
})
);
非常感谢塞拉,它起作用了!!我不知道我们可以处理我们返回的内容(返回Observable.from…),然后在最后返回一个Observable。顺便说一句,我现在明白了为什么要使用lambda,这和我的样板代码有很大的不同!欢迎来到函数世界:)您可能希望使用.toList()
而不是collect
方法