下面是我想要實現的: 我有一個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
謝謝你的伴侶:) –