如何实现多个接口数据请求完成之后在做展示处理?
Opened this issue · 8 comments
比如有一个页面,需要从3个不同的接口获取3个不同的数据进行计算后才能显示在屏幕上,那就意味着我的先保证3个接口都能正常获取到数据,不知道rxjava能否实现,怎么实现,提供下思路谢谢!可以给我个参考代码(伪代码)
@luoqqsh
用flatmap操作符组合具有依赖关系的类型。比如,我们获取User Order逻辑是:先获取App Token , 再根据App Token去获取User Token,最后根据App Token和User Token去获取User Order
Observable<Order> orderObservable =
getAppTokenObservable()
.flatMap((appToken) -> geUserTokenObservable(appToken),
(appToken,userToken) -> getOrderObservable(appToken,userToken));
用Zip
like this :
@Override
public Observable<Hero> queryHeroDetail(Hero hero) {
String heroId = hero.getObjectId();
return Observable
.zip(getSkills(heroId), getRecommends(heroId), getAttritubes(heroId), (skills, recommends, attritubes) -> {
hero.setAttributes(attritubes);
hero.setSkills(skills);
hero.setRecommends(recommends);
return hero;
})
.compose(RxHandler.applySchedulers());
}
getSkills getRecommends getAttritubes 都是联网查询数据
简单来说zip操作符就是合并多个数据流, 然后发送最终合并的数据
@tgithubc getSkills(heroId), getRecommends(heroId), getAttritubes(heroId),这3个是数据请求吗?有没有代码看一下,现在的网络框架都是发起请求后会自动跳到另一个listener或者通过handler返回结果,可以说发起请求写在点击事件或加载事件,而结果是写在事件外面。如何使用像getSkills(heroId),进行封装
@UsherBaby geUserTokenObservable(appToken)这个代码是什么,能给我个例子吗?我想知道现在的网络获取都是发起请求和返回结果分开两个地方。怎么封装到一起,怎么写成 geUserTokenObservable(appToken)像这样的形式
@UsherBaby 你说你用的是retrofit,能给我个例子看下怎么写吗?
public interface GitHubService {
@GET("users/{user}/repos")
Observable<List<Repo>> listRepos(@Path("user") String user);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();
GitHubService service = retrofit.create(GitHubService.class);
Observable<List<Repo>> reposObservable = service.listRepos("octocat");
}
建议你自己上retrofit官网看看吧