Retrofitで別の要求を透過的に送信することによって特定のエラーを処理する
質問
これが私が扱うことを試みている場合、
- 要求が実行され、応答が認証トークンが期限切れになっていることを示す
- リフレッシュトークンリクエスト を送信する
- リフレッシュトークン要求が成功した場合は、元の要求 を再試行してください。
発信元の観点からは、呼び出し活動、フラグメント...などに透過的であるべきです。それは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);
}
. 所属していません StackOverflow