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