Robertas Setkus
Robertas Setkus

Reputation: 3161

Retrofit + RxJava chain multiple requests and aggregate the result

I am looking for the way how to chain multiple but same API requests with different parameters. So far my method looks like this:

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

I expected that concat method combines Oservables data into one stream and returns combined Observable but I am getting only the last one calls result. However, in logcat I can see that correct number of calls to API was made.

Upvotes: 1

Views: 1945

Answers (1)

ByteWelder
ByteWelder

Reputation: 5604

Try using Observable.merge() and Observable.toList() as follows:

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

// add observables to the list here...

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

Upvotes: 1

Related Questions