2016-06-21 6 views
3

retrofit2を使用していますが、Retxambaを使ってRxJavaを学習しています。各ユーザーのユーザー retrofit2 + rxjavaのネストされたリクエストと子リクエストのエラーを無視します

    1. GETリストを、特定のUSER_IDのためのユーザ詳細情報を取得する:私は、次のフローを達成しようとしています。
    2. 詳細を表示したユーザーのリストです。

    これは、これまでの私のコードです:

    getUsers().flatMapIterable(users -> users) 
    flatMap(user -> getDetailInfo(user.getID() 
         .doOnNext(detailInfo -> user.setDetailInfo(detailInfo)) 
         .map(detailInfo -> user)) 
    .toList().subscribeOn(Schedulers.newThread()) 
    .observeOn(AndroidSchedulers.mainThread()) 
    subscribe(users -> {}, error -> {}); 
    

    問題はgetDetailInfoは404応答を与えた際に、スコープをエラーに入力してもgetUsers、観察が200応答を与えています。 getUsersが200応答を返す限り、どのように応答をユーザースコープに入力するのですか?

    私は十分にはっきりしています。 おかげ

  • +1

    '.onErrorReturn()'を試したことがありますか? – KERiii

    +0

    '.map'の後に' .onErrorReturn(throwable - > user) 'を追加しようとしました。それは動作しますが、私はそれが正しい実装であることを確認したいのですか?ありがとう – Tobi

    +0

    私はそれが正しいと思う、onErrorReturn' Observableは、エラーが発生したときに特定のアイテムを放出し、その後正常に終了するよう指示します。 – KERiii

    答えて

    1

    あなたのストリームを破壊するためにあなたの404を避けたい場合は、nullのようなデフォルトの応答にあなたのエラーを変換するonErrorResumeNextを使用する必要があり、その後、あなたはストリームがチェーンの要求がエラーを返す場合でも存続します。

    +0

    どこに 'onErrorResumeNext'を置くべきですか? Observable 'getDetailInfo()'に 'Observable.empty()'を返すようにしました。ユーザーのリストを取得する代わりに、空のリストを取得します。ありがとうございます – Tobi

    +0

    'Observable.empty()'は 'onCompleted'シグナルを送出し、代わりにnullを送出しようとします –

    +0

    '.OnErrorResumeNext(throwable - > null)'を追加すると、サブスクライブはエラースコープになります。 '.OnErrorResumeNext(throwable - > Observable.just(null))'を追加すると、サブスクライブは成功範囲に入りますが、ユーザーの空のリストを返します。 – Tobi

    関連する問題