2016-12-02 4 views
1

AndroidアプリでRetrofitと組み合わせてRxJavaを使用しようとしています。RxJava and-then-when

私はいくつかのモデルクラスからURLを取得(GET)する必要があり、使用できない場合は別のエンドポイントにPOSTしてGETで再度取得する必要がありました。

最終的な結果は常にURLです(もちろんエラーがなかった場合)ので、そこになければ作成してから取得します。

私はRxJavaで呼び出しをネストするだけでこれを行うことができますが、これは "反応的"ではないようですので、私が探しているもののように思えるかもしれません。私は例を探してみましたが、これらの3つの言葉は非常に一般的であるため、検索することは非常に困難です。

私が説明したことを達成するために観測値を組み合わせることは可能ですか?

答えて

0

あなたは以下のメソッドを持っていると仮定しましょう:

apiManager.makeGETRequest(); //returns Url or throws an Exception 
apiManager.makePOSTRequest(); //returns Url 

使用に便利なonErrorResumeNextオペレータ:

apiManager.makeGETRequest() 
    .onErrorResumeNext(t -> apiManager.makePOSTRequest()) 
    ... 

それはExceptionをインターセプトし、Observableに置き換えます。あなたのケースでは、makeGETRequest()が成功すると、ダウンストリームはonErrorResumeNextを無視します。それ以外の場合はapiManager.makePOSTRequest()が呼び出されます。

P.S. onErrorResumeNextで受け取った例外の種類を確認することを忘れないでください。