2016-07-21 38 views
1

我最近开始使用Rxjava和翻新,并寻找关于如何执行n次翻新后调用并通过rxjava跟踪它们的任何想法。一旦所有操作完成,UI事件就会发生。Rxjava,翻新和多次调用

我发现这篇文章:http://randomdotnext.com/retrofit-rxjava/然而它使用for循环来启动多个请求observables。也许除了for循环之外还有更优雅的方法吗?这种努力最好的rxjava运算符是什么?

回答

0

除了使用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(...); 
0

RxJava提供a lot operators多个观测结合起来。

在你的情况,你可以使用运营商merge,并在onComplete()

0

做UI工作当多个呼叫取决于您可以使用平面地图或地图的concat利用你的电话一样的东西。然后最后更新你的观点。