我有一个具有用户登录系统的项目。在我的项目中,我使用Retrofit
。如您所知,Retrofit
有 onResponse
和 onFailure
方法。
我想要实现的是每当调用返回 401 错误时就将用户注销。
第一个选项是在每次进行 API 调用时将它们注销,覆盖 onResponse
。我可以从调用 response 的
,如果是401,则注销用户。然而,这不是一个好方法。Response
对象获取 HTTP 状态代码.getRaw().code()
如果您对高层处理这种情况有任何建议,那就太好了。
谢谢
最佳答案
如前所述,一种方法是使用拦截器
。
您可以向 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/