我最近开始使用Rxjava和翻新,并寻找关于如何执行n次翻新后调用并通过rxjava跟踪它们的任何想法。一旦所有操作完成,UI事件就会发生。Rxjava,翻新和多次调用
我发现这篇文章:http://randomdotnext.com/retrofit-rxjava/然而它使用for循环来启动多个请求observables。也许除了for循环之外还有更优雅的方法吗?这种努力最好的rxjava运算符是什么?
我最近开始使用Rxjava和翻新,并寻找关于如何执行n次翻新后调用并通过rxjava跟踪它们的任何想法。一旦所有操作完成,UI事件就会发生。Rxjava,翻新和多次调用
我发现这篇文章:http://randomdotnext.com/retrofit-rxjava/然而它使用for循环来启动多个请求observables。也许除了for循环之外还有更优雅的方法吗?这种努力最好的rxjava运算符是什么?
除了使用for循环,您可以从List/Array创建Observable序列,然后使用flatMap/concatMap运算符。
使用for循环:
GithubService service = ServiceFactory.createRetrofitService(GithubService.class, GithubService.SERVICE_ENDPOINT);
for(String login : Data.githubList) {
service.getUser(login)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Github>() {
@Override
public final void onCompleted() {
// do nothing
}
@Override
public final void onError(Throwable e) {
Log.e("GithubDemo", e.getMessage());
}
@Override
public final void onNext(Github response) {
mCardAdapter.addData(response);
}
});
}
纯的Rx:
GithubService service = ServiceFactory.createRetrofitService(GithubService.class, GithubService.SERVICE_ENDPOINT);
Observable.from(Data.githubList)
.flatMap(login -> service.getUser(login))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(...);
RxJava提供a lot operators多个观测结合起来。
在你的情况,你可以使用运营商merge
,并在onComplete()
做UI工作当多个呼叫取决于您可以使用平面地图或地图的concat利用你的电话一样的东西。然后最后更新你的观点。