2016-07-21 10 views
1

Ich habe vor kurzem begonnen, Rxjava und Retrofit zu verwenden, und auf der Suche nach irgendwelchen Ideen, wie n Anzahl von Retrofit Post-Anrufe durchzuführen und sie über Rxjava verfolgen. Sobald alle Aktionen abgeschlossen sind, wird ein Benutzerschnittstellenereignis auftreten.Rxjava, Nachrüstung und mehrere Anrufe

Ich habe diesen Artikel gefunden: http://randomdotnext.com/retrofit-rxjava/ aber es verwendet eine for-Schleife zum Initiieren mehrerer Anfrage Observablen. Vielleicht gibt es einen eleganteren Weg neben einer for-Schleife? Was ist der beste rxjava-Operator für diese Art von Aufwand?

Antwort

0

Anstatt for-Schleife können Sie eine Observable-Sequenz aus der Liste/Array erstellen und dann den Operator flatMap/concatMap verwenden.

Verwendung for-Schleife:

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); 
      } 
     }); 

} 

reine 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 bietet a lot operators mehrere Observablen zu kombinieren.

In Ihrer Situation können Sie Operator merge, verwenden und UI Arbeit bei onComplete()

0

tun Wenn mehrere Anruf auf die gleiche Sache hängen Sie flache Karte oder concat Karte verwenden können Ihren Anruf zu nutzen. Dann aktualisieren Sie Ihre Ansicht.

Verwandte Themen