RxJava - получить список данных результатов 2 комбинированных запросов - PullRequest
0 голосов
/ 16 мая 2018

У меня есть две услуги:

private Observable<UMapsResponse> requestToServiceGetMaps(int idVenue, String accessToken) {
    return mService.getUMaps(idVenue, accessToken);
}

 private Observable<UMap> requestToServiceGetMapImageUrl(int idVenue, int idMap, String accessToken) {
    return mService.getUMap(idVenue, idMap, accessToken);
}

Итак, я объединил свои две службы так:

    requestToServiceGetMaps(idVenue, accessToken)
            .flatMap(uMapsResponse -> Observable.just(uMapsResponse.getIndoorMaps()))
            .flatMapIterable(indoorMap -> indoorMap)
            .flatMap(
                    indoorMap -> requestToServiceGetMapImageUrl(idVenue, indoorMap.getId(), accessToken),
                    (indoorMap, uMap) -> Log.i(TAG, "MapsItem: " + new MapsItem(indoorMap, uMap))
            ).toList()
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new SingleObserver<List<Integer>>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onSuccess(List<Integer> integers) {

                }

                @Override
                public void onError(Throwable e) {

                }
            });

Итак, у меня есть 2 вопроса:

  1. Почему у меня есть список целых чисел в методе onSuccess?
  2. Как получить список MapsItem (indoorMap, uMap)?

1 Ответ

0 голосов
/ 16 мая 2018

Вы получаете список целых чисел, потому что вы излучаете целые числа с последнего шага в цепочке наблюдателей, поскольку именно это Log.i() возвращает.

            ...
            .flatMap(
                    indoorMap -> requestToServiceGetMapImageUrl(idVenue, indoorMap.getId(), accessToken),
                    (indoorMap, uMap) -> new MapsItem(indoorMap, uMap)
            )
            .doOnNext( v -> Log.i(TAG, "MapsItem: " + v) )
            .toList()
            ...

Обратите внимание, что результат окончательного flatMap() это новый MapsItem, который вы искали.

...