2016-04-10 19 views
1

Farklı parametrelerle aynı API isteklerinin nasıl birden çok şekilde zincirleneceğini arıyorum. Şimdiye kadar benim yöntemi şöyle görünür:Retrofit + RxJava zinciri birden çok istekte bulunup sonucu topluyor

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

Ben concat yöntem tek bir akış halinde Oservables verilerini birleştirir ve iadeler gözlemlenebilir kombine ama sadece sonuncusu sonucunu çağrıları alıyorum beklenmektedir. Ancak, logcat'te API'ye doğru sayıda çağrı yapıldığını görebiliyorum.

cevap

1

şöyle Observable.merge() ve Observable.toList() kullanmayı deneyin:

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

// add observables to the list here... 

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