Retrofitで別の要求を透過的に送信することによって特定のエラーを処理する

StackOverflow https://stackoverflow.com//questions/22014958

  •  21-12-2019
  •  | 
  •  

質問

これが私が扱うことを試みている場合、

  • 要求が実行され、応答が認証トークンが期限切れになっていることを示す
  • リフレッシュトークンリクエスト
  • を送信する
  • リフレッシュトークン要求が成功した場合は、元の要求
  • を再試行してください。

発信元の観点からは、呼び出し活動、フラグメント...などに透過的であるべきです。それは1つの要求です。

OKHTTPClientを直接使用するときまでにこのフローを達成しましたが、Retrofitでこれを実現する方法がわかりません。

このオープンに関連するもの issue Aについて

後付けでこれを達成するための直接的な方法がない場合、それを実装するための最良の方法は何でしょうか?基本リスナークラス?

そのような場合に役立つことができるならば、Robospiceも後付けでも使用しています。

役に立ちましたか?

解決

私はロボスパスを使っているので、抽象的な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);
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top