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

标签 java android error-handling retrofit2

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

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

第一个选项是在每次进行 API 调用时将它们注销,覆盖 onResponse。我可以从调用 response 的 Response 对象获取 HTTP 状态代码.getRaw().code(),如果是401,则注销用户。然而,这不是一个好方法。

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

谢谢

最佳答案

如前所述,一种方法是使用拦截器

您可以向 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();
    }
}

关于java - 使用 Retrofit2 在 Android 中处理 API 响应顶层的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35068480/

相关文章:

java - 您可以更改变量的值,但将使用旧值实例化的所有其他内容更改为新值吗?

Java - 获取 JSONObject 时出现 NullPointerException

java - 我如何在java中发送http请求?

error-handling - 安装 "module list"模块后Drupal白屏

error-handling - 禁用登录vlc

C# 消息框错误消息

Java线程访问对象

java - 使用 spring 查询数据库中的列时出错

android - Realm.io Android 从表中获取最后 20 项的最佳方法

android - Google Map V2 和 GCM 在一个项目中