2017-09-14 8 views
0

ここに私が達成しようとしていることがあります: 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"); 
        } 
       }); 

しかし、私はすべてのエラーをチェックするためにflatMapIterablemapflatmapを使用すべきかわかりません。私は成功せず、次のようなものをやっている:

はここ 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を解決することはできません取得します。私はそれがresponseMyResponse.classと特定できないと信じているからです。私はここで立ち往生しています。私はRxJava2で私が望むものをどのように達成することができますか教えてください。

答えて

2

map(response -> {...})ObservableMyResponseに作成したため、コンパイルされません。 map(response -> {...})flatMap(response -> {...})に置き換えるか、flatMapIterableの前にflatMap(r -> r)を追加してください。

+0

mapをflatMapに置き換えました:)ありがとう。しかし、それがflatMapで動作する理由と地図で動作しない理由を教えてください。 –

+1

もちろん、あなたのエラー処理コードは 'MyResponse'を' Observable'にラップしたので、処理されるアイテムのタイプはObservable 'になりました。そのため、 'getData()'が 'Observable'ではなく' MyReponse'のメソッドであるため、コードがコンパイルされませんでした。 'flatMap'は外部の' Observable'を削除しますので、型はエラー処理コードを追加する前と同じようになります。 – hgrey

+0

トンメイトに感謝:) –

関連する問題