使用 Retrofit2 处理 Android 中的 API 响应顶级的最佳方法是什么?

What is the best way to handle an API Response top level in Android using Retrofit2?

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

我想实现的是每当调用returns401错误时将用户注销。

第一个选项是每次我进行 API 调用时将它们注销,覆盖 onResponse。我可以从 Response 对象调用 response.getRaw().code(),如果是 401,则注销用户。但是,这不是一个好方法。

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

谢谢

如前所述,一种方法是使用 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();
    }
}