0

ユーザーログインシステムを持つプロジェクトがあります。私のプロジェクトでは、を使用してRetrofitいます。ご存じのように、RetrofithasonResponseonFailureメソッドです。

私が達成したいのは、呼び出しが401エラーを返すたびにユーザーをログアウトすることです。

最初のオプションは、API 呼び出しを行うたびにログアウトし、onResponse.I can get HTTP Status Code from Responseobject calling をオーバーライドし、それが401response.getRaw().code()の場合はユーザーをログアウトすることです。ただし、これは良い方法ではありません。

この状況をトップレベルで処理するためのアドバイスがあれば、それは素晴らしいことです。

ありがとう

4

1 に答える 1

2

前述のように、1 つの方法は を使用することInterceptorsです。

OkHttpすべての 401 リクエストをインターセプトするために、クライアントへのコールバックを備えたインターセプターを追加できます。次に、コールバックを呼び出してリスナーに通知します。

addNetworkInterceptor()ライブデータが必要であり、キャッシュされた結果を安全に無視できるため、必ず として追加してください。

OkHttpClient client = new OkHttpClient.Builder()
            .addNetworkInterceptor(new UnauthorizedInterceptor(myListener))
            .build();

これがどのように機能するかについてのいくつかのサンプルコード (テストされていません):

public class UnauthorizedInterceptor implements Interceptor {
    private Callback mCallback;

    public UnauthorizedInterceptor(Callback callback) {
        mCallback = callback;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        Response originalResponse = chain.proceed(chain.request());

        if (originalResponse.code() == HttpURLConnection.HTTP_UNAUTHORIZED) {
            mCallback.onUserLoggedOut();
        }

        return originalResponse;
    }

    interface Callback {
        void onUserLoggedOut();
    }
}
于 2016-01-28T19:24:43.627 に答える