2016-07-21 2 views
1

Я недавно начал использовать Rxjava и модифицировал и искал любые идеи о том, как выполнить n количество модифицированных почтовых вызовов и отслеживать их через rxjava. После того, как все действия будут выполнены, произойдет событие UI.Rxjava, модифицированные и множественные вызовы

Я нашел эту статью: http://randomdotnext.com/retrofit-rxjava/ однако он использует цикл for для запуска нескольких наблюдаемых запросов. Может быть, есть более элегантный способ, кроме цикла for? Какой лучший оператор rxjava для такого рода усилий?

ответ

0

Вместо использования цикла for вы можете создать последовательность Observable из списка/массива, а затем использовать оператор flatMap/concatMap.

Используя цикл:

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

При множественных вызовов зависит от того же, что вы можете использовать плоскую карту или карту Concat использовать ваш звонок. Затем, наконец, обновите свое представление.

Смежные вопросы