RxJava2 map/flatMap with flatMapIterable



这是我要实现的目标:我有一个API响应说myResponse,其中包含项目的List。我想通过flatMapIterable迭代每个项目,这可以正常工作。但是在这样做之前,我想检查API是否返回错误或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之前如何使用mapflatmap检查任何错误。我正在做类似的事情,没有任何成功:

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 -> {...})中,您创建了MyResponseObservable,这就是为什么它不编译的原因。只需将map(response -> {...})替换为flatMap(response -> {...})或在flatMapIterable之前添加flatMap(r -> r)

最新更新