0

我有一个具有用户登录系统的项目。在我的项目中,我使用Retrofit. 如您所知,RetrofitonResponseonFailure方法。

我想要实现的是每当呼叫返回401错误时将用户注销。

第一个选项是每次我进行 API 调用时注销它们,覆盖onResponse.I can get HTTP Status Code from Responseobject calling ,如果是401response.getRaw().code()则注销用户。但是,这不是一个好方法。

如果您对顶级处理这种情况有任何建议,那就太好了。

谢谢

4

1 回答 1

2

如前所述,一种方法是使用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 回答