我使用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)...
没有存储库的签名,很难确切地说出问题所在,但是您确实提到getBreedDogs
返回了Single<List<BreedDogs>>
。如果是这种情况,据我所知,Single
没有flatMapIterable
,但它具有flattenAsObservable
,可用于执行您想要的操作。
它将在单身中映射列表,并以可观察的方式发出其项目。这意味着您不再可以使用flattenAsObservable
,而必须切换到map
: