2016-04-10 5 views
1

Я ищу способ объединения нескольких, но одинаковых запросов API с различными параметрами. До сих пор мой метод выглядит следующим образом:Retrofit + RxJava несколько запросов и суммировать результат

@Override 
public Observable<List<Entity>> getResult(Integer from, Integer to, Integer limit) { 
    MyService myService = restClient.getMyService(); 
    if (null != from && null != to) { 
     Observable<List<Response>> responseObservable = myService.get(from, limit); 
     for (int i = from + 1; i <= to; i++) { 
      responseObservable = Observable.concat(responseObservable, myService.get(i, limit)); 
     } 

     return responseObservable.map(mapResponseToEntity); 
    } else { 
     int fromParameter = null == from ? DEFAULT_FROM : from; 
     return myService.get(fromParameter, limit).map(mapResponseToEntity); 
    } 
} 

Я ожидал, что concat метод сочетает в себе данные Oservables в один поток и возвращает объединенный Observable, но я получаю только последний называет результат. Однако в logcat я вижу, что было сделано правильное количество вызовов API.

ответ

1

Попробуйте использовать Observable.merge() и Observable.toList() следующим образом:

List<Observable<Response>> observables = new ArrayList(); 

// add observables to the list here... 

Subscription subscription = Observable.merge(observables) 
     .toList() 
     .single() 
     .subscribe(...); // subscribe to List<Response>