2017-04-20 7 views
0

さまざまなシナリオに基づいて200,202,4xxを返すAPIがあります。私は202を取得するとき、私は200または4xxを得るまで私は同じAPIを作ることになっています。私はdoOnErrorNext、onError、onNextを使ってみました。私は、問題Retrofit2 + RxJava + Jackson for 202を使用して再試行ステータスコード

Observable<MyPOJO> makeAPI(); 

Observable<MyPOJO> makeAPIImpl(){ 

makeAPI().doOnErrorNext(/*how to I access the error code here*/); 
makeAPI().doOnNext(/*given that 202 is a success code, I expected it to come here, but it goes to Error because of JSON Mapping*/); 

} 

doOnErrorNextをクラックすることができませんでした - >私は再びAPI呼び出しを作ることができたが、その後、それは私が複数の回答をチェックした

私はいけない、すべてのエラー・シナリオのために起こりますこれに関しては誰もがこの組み合わせを具体的に解決しており、私のユースケースに他の答えを組み込むことはできません。

inner class ExpiredSessionInterceptor : Interceptor { 

    override fun intercept(chain: Interceptor.Chain): Response { 
     val request = chain.request() 
     val response = chain.proceed(request) 
     if (response.code() == 202) { 
      val newRequest = request.newBuilder().build() 
      return chain.proceed(newRequest) 
     } else { 
      return response; 
     } 
    } 
} 

+0

よく、202は成功コードだから、改造はそれを解析しようとします。あなたのケースでは、おそらく例外で失敗しました。応答が間違っている場合、サーバーは202を返しますか? – yosriz

答えて

0

私はあなたが、これらの線に沿って何かを(これはKotlinの私のアプリケーションのいずれかからであるが、それはあなたのアイデアを与える必要があります)あなたの要求を再試行するOkHttpを使用し、インターセプターを使用してお勧めします

+0

さて、これを確認します。ありがとう。 –

+0

私はそれを試した。それは初めてうまくいった。しかし、2回目以降はヒットしなかった。これを引き起こしていると思われるものはありますか? –

+0

申し訳ありませんが、わかりません。私はこれを私のコードから変更して、私が話しているサーバーから特定の応答を得ると、一度再試行します。理由だけを理解するには、OkHttpコードにステップインする必要があります。新しい要求を作成する必要があるかもしれませんが、再現する手段がなければ、何が問題になるのかは分かりません。 – Francesc

関連する問題