RxJava /响应中的每个项目的改造调用

问题描述 投票:0回答:1

我使用Retrofit / rxJava调用我的API,并且得到Observable响应,例如BreedDog单个列表

。您可以看到我的代码:

compositeDisposable.add(breedDogsDisplayDataRepository.getBreedDogs(name)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(new DisposableSingleObserver<List<BreedDog>>() {

                @Override
                public void onSuccess(List<BreedDog> breedDogList) {
                    Log.e("test", "okPresenter");
                    view.displayBreedDogs(breedDogToViewModelMapper.map(breedDogList));
                }

                @Override
                public void onError(Throwable e) {
                    Log.e("test", "errorPresenter : " + e.toString());
                    // handle the error case
                    System.out.println(e.toString());
                }
            }));

这有效,但现在,对于此列表的每个项目,我需要调用我的API以获得URL图像并更新我的列表。但是我不知道如何...我试图在Observable中更改我的单一响应,并使用了flatMap或flatMapIterate等运算符。等等。但是,我一直都在与Object出错。

这是一个示例:

breedDogsDisplayDataRepository.getBreedDogs(name)
            .flatMapIterable(breedDogs -> breedDogs)
            .map( item ->   breedDogsDisplayDataRepository.getImageBreedDog(item.getId())
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeWith(new DisposableSingleObserver<List<BreedImageResponse>>() {

                        @Override
                        public void onSuccess(List<BreedImageResponse> breedImageResponses) {

                        }

                        @Override
                        public void onError(Throwable e) {
                            Log.e("test", "errorPresenter : " + e.toString());
                            // handle the error case
                            System.out.println(e.toString());
                        }
                    })));

我使用好方法吗?还是需要更改?

我使用Retrofit / rxJava调用我的API,并且得到了类似ObedDog列表的Observable响应。您可以看到我的代码:CompositeDisposable.add(breedDogsDisplayDataRepository.getBreedDogs(name)...

android retrofit rx-java2
1个回答
0
投票

没有存储库的签名,很难确切地说出问题所在,但是您确实提到getBreedDogs返回了Single<List<BreedDogs>>。如果是这种情况,据我所知,Single没有flatMapIterable,但它具有flattenAsObservable,可用于执行您想要的操作。

它将在单身中映射列表,并以可观察的方式发出其项目。这意味着您不再可以使用flattenAsObservable,而必须切换到map

© www.soinside.com 2019 - 2024. All rights reserved.