6

これが私が処理しようとしているケースです。

  • リクエストが実行され、レスポンスが認証トークンの有効期限が切れていることを示している場合、
  • リフレッシュ トークン リクエストを送信する
  • リフレッシュ トークン リクエストが成功した場合は、元のリクエストを再試行します。

これは、呼び出し元のアクティビティ、フラグメントなどに対して透過的である必要があります。呼び出し元の観点からは、1 つの要求と 1 つの応答です。

OkHttpClient を直接使用して以前にこのフローを達成したことがありますが、Retrofit でこれを達成する方法がわかりません。

おそらく、ResponseInterceptor に関するこの未解決の問題に関連するものでしょうか?

レトロフィットでこれを達成する簡単な方法がない場合、それを実装する最良の方法は何ですか? ベースリスナークラス?

そのような場合に役立つ場合は、RoboSpice with Retrofit も使用しています。

4

1 に答える 1

2

私は RoboSpice を使用しているので、abstract を作成してこれを行うことになりましたBaseRequestListener

public abstract class BaseRequestListener<T> implements RequestListener<T> {

    @Override
    public void onRequestFailure(SpiceException spiceException) {
        if (spiceException.getCause() instanceof RetrofitError) {
            RetrofitError error = (RetrofitError) spiceException.getCause();
            if (!error.isNetworkError() 
                && (error.getResponse().getStatus() == INVALID_ACCESS_TOKEN_STATUS_CODE)) {
                //I'm using EventBus to broadcast this event,
                //this eliminates need for a Context
                EventBus.getDefault().post(new Events.OnTokenExpiredEvent());
                //You may wish to forward this error to your listeners as well,
                //but I don't need that, so I'm returning here.
                return;
                }
         }
         onRequestError(spiceException);
    }

    public abstract void onRequestError(SpiceException spiceException);
}
于 2014-04-08T10:52:36.657 に答える