2016-07-21 18 views
1

最近、Rxjavaを使用して改造し、n個の改造後の呼び出しを実行し、rxjava経由でそれらを追跡する方法に関するアイディアを探し始めました。すべてのアクションが完了すると、UIイベントが発生します。Rxjava、改造および複数のコール

私はこの記事を見つけました:http://randomdotnext.com/retrofit-rxjava/しかし、それはforループを使用して複数のリクエストオブザーバを開始します。多分、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の作業を行うことができます。最後に、あなたのビューを更新してください。

関連する問題