FVo*_*Vod 3 android observable rx-java rx-android retrofit2
我需要连接多个API调用,我想使用retrofit2和rxJava observable来做到这一点.我的方案如下:
我必须做第一次调用,返回一个对象数组,响应将是这样的:
[{"title": "Title 1", "id": "1"}, {"title": "Title 2", "id": "2"}]
Run Code Online (Sandbox Code Playgroud)
然后我需要为每个对象执行API调用,因此每个对象的API响应将类似于:
[{"title": "Chapter A", "id": "1A", ...}, {"title": "Chapter B", "id": "1B", ...}, ...]
Run Code Online (Sandbox Code Playgroud)
所以我想连接所有这些调用并将它合并到一个具有所有信息的唯一响应对象中.我怎么能这样做?如何进行第一次调用然后响应对每个对象执行一次调用并等待所有调用完成并合并结果?
非常感谢
假设您有具有已定义属性的对象:
public class TvShow {
public String title;
public Long id;
public List<TvChapter> chapterList;
}
public class TvChapter {
public String title;
public String id;
}
Run Code Online (Sandbox Code Playgroud)
你已经有了获取数据的方法:
public Observable<List<TvShow>> getShows()
public Observable<List<TvChapter>> getTvChapters(Long tvShowId)
Run Code Online (Sandbox Code Playgroud)
以下是返回的组合RxJava流Observable<List<TvShow>>:
getShows()
.flatMap(new Func1<List<TvShow>, Observable<TvShow>>() {
@Override
public Observable<TvShow> call(List<TvShow> tvShows) {
return Observable.from(tvShows);
}
}).flatMap(new Func1<TvShow, Observable<TvShow>>() {
@Override
public Observable<TvShow> call(TvShow tvShow) {
return Observable.zip(Observable.just(tvShow),
getTvChapters(tvShow.id),
new Func2<TvShow, List<TvChapter>, TvShow>() {
@Override
public TvShow call(TvShow tvShow, List<TvChapter> tvChapters) {
tvShow.chapterList = tvChapters;
return tvShow;
}
});
}
}).toList();
Run Code Online (Sandbox Code Playgroud)
这个想法是:
getShows)Observable.from()运营商)getTvChapters(tvShow.id))tvChapters通话结果tvShowObservable.toList()运算符)| 归档时间: |
|
| 查看次数: |
5166 次 |
| 最近记录: |