ここに私が達成しようとしていることがあります: List
の項目を含むmyResponse
というAPIレスポンスがあります。私はflatMapIterable
を通して各項目を繰り返して、うまくいきます。しかし、その前に、APIがエラーを返さないか、またはList
サイズが0を超えていないかどうかチェックしたいと思います。これを達成することはできません。 は、ここで私はこれまで試してみましたどのようなコードです:flatmapIterableを使用したRxJava2マップ/ flatMap
// 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
を使用すべきかわかりません。私は成功せず、次のようなものをやっている:
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());
、私はエラーが()のgetDataを解決することはできません取得します。私はそれがresponse
をMyResponse.class
と特定できないと信じているからです。私はここで立ち往生しています。私はRxJava2で私が望むものをどのように達成することができますか教えてください。
mapをflatMapに置き換えました:)ありがとう。しかし、それがflatMapで動作する理由と地図で動作しない理由を教えてください。 –
もちろん、あなたのエラー処理コードは 'MyResponse'を' Observable'にラップしたので、処理されるアイテムのタイプはObservable 'になりました。そのため、 'getData()'が 'Observable'ではなく' MyReponse'のメソッドであるため、コードがコンパイルされませんでした。 'flatMap'は外部の' Observable'を削除しますので、型はエラー処理コードを追加する前と同じようになります。 –
hgrey
トンメイトに感謝:) –