RxJava2 map / flatMap with flatMapIterable

时间:2017-09-14 08:47:24

标签: android rx-java2

这是我想要实现的目标: 我有一个API回复说myResponse,其中包含List项。我希望通过flatMapIterable遍历每个项目,这样可以正常工作。但在此之前,我想检查API是否未返回错误或List尺寸是否为>我无法做到这一点。 这是我到目前为止所尝试的代码:

    // 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之前使用flatmapflatMapIterable来检查是否有任何错误。我正在做类似跟进的事情,没有任何成功:

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实现我想要的东西?

1 个答案:

答案 0 :(得分:2)

map(response -> {...})中,您创建了Observable MyResponse,这就是它无法编译的原因。只需将map(response -> {...})替换为flatMap(response -> {...}),或在flatMap(r -> r)之前添加flatMapIterable