下面是我想要实现的: 我有一个API响应说myResponse
,其中包含List
项目。我想遍历每个项目通过flatMapIterable
哪些工作正常。但在此之前,我想检查API是否未返回错误或List
大小> 0.我无法实现此目的。 这是我迄今为止尝试过的代码:RxJava2 map/flatMap with flatMapIterable
// This works & I am able to iterate through each item
myApi.getData()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.flatMapIterable(response -> response.getData().getItems())
.subscribeWith(new DisposableObserver<Mobile>() {
@Override
public void onNext(@NonNull Item item) {
Log.e("TAG", "item is => " + item.getItemName());
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
Log.e("TAG", "processing completed");
}
});
但我不知道我应该如何使用map
或flatmap
flatMapIterable
之前检查任何错误。我做类似下面没有任何成功:
myApi.getData()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.map(response -> {
if(response.getStatus() == 200) {
List<Item> items = response.getData().getItems();
if(items == null || items.size() < 1)
return Observable.error(new Throwable("No data!"));
return Observable.just(response);
}
return Observable.error(new Throwable(response.getData().getMsg()));
})
.doOnError(Throwable::getMessage)
.flatMapIterable(response -> response.getData().getItems());
这里就flatMapIterable
,我得到错误无法解析的getData()。因为我相信它无法将response
识别为MyResponse.class
。我被困在这里,请让我知道我该如何用RxJava2实现我想要的?
更换地图与flatMap工作:)谢谢。但是,你能告诉我为什么它与flatMap和不与地图一起工作? –
当然,你的错误处理代码将'MyResponse'包装成'Observable',所以处理的项目类型现在是'Observable'。这就是为什么代码没有编译为'getData()'是'MyReponse'中的方法而不是'Observable'。 'flatMap'“移除”外部'Observable',所以类型现在和添加错误处理代码一样。 –
hgrey
谢谢你的伴侣:) –