RxJava2 map/flatMap 与 flatMapIterable
RxJava2 map/flatMap with flatMapIterable
这是我想要实现的目标:
我有一个 API 响应说 myResponse
,其中包含 List
项。我想通过 flatMapIterable
遍历每个项目,效果很好。但在这样做之前,我想检查 API 是否没有 return 错误或 List
大小是否 > 0。我无法实现这一点。
这是我到目前为止尝试过的代码:
// 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");
}
});
但我不确定在flatMapIterable
之前应该如何使用map
或flatmap
来检查是否有任何错误。我正在做类似以下的事情但没有成功:
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 实现我想要的?
在 map(response -> {...})
中您创建了 Observable
个 MyResponse
,这就是它无法编译的原因。只需将 map(response -> {...})
替换为 flatMap(response -> {...})
或在 flatMapIterable
.
之前添加 flatMap(r -> r)
这是我想要实现的目标:
我有一个 API 响应说 myResponse
,其中包含 List
项。我想通过 flatMapIterable
遍历每个项目,效果很好。但在这样做之前,我想检查 API 是否没有 return 错误或 List
大小是否 > 0。我无法实现这一点。
这是我到目前为止尝试过的代码:
// 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");
}
});
但我不确定在flatMapIterable
之前应该如何使用map
或flatmap
来检查是否有任何错误。我正在做类似以下的事情但没有成功:
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 实现我想要的?
在 map(response -> {...})
中您创建了 Observable
个 MyResponse
,这就是它无法编译的原因。只需将 map(response -> {...})
替换为 flatMap(response -> {...})
或在 flatMapIterable
.
flatMap(r -> r)