今天偶然发现一个问题,如题,记下,以备以后注意。
我用的请求框架是Retrofit,在body拦截器里匹配异常message就可以解决,发现了几个异常message:
"Canceled"、"Socket closed"、"Socket is closed"等等,于是匹配就行了
public InterceptorbodyInterceptor() {
Interceptor bodyInterceptor =new Interceptor() {
@Override
public Responseintercept(Chain chain) {
Request originalRequest = chain.request();
Request requestBuilder = originalRequest.newBuilder()
.build();
try {
return chain.proceed(requestBuilder);
}catch (IOException e) {
e.printStackTrace();
//如果一个后台接口请求贯穿手机前台和后台切换,那么就会报包含如下字符串的message的IO异常,比如刷新后立马切换APP到后台
//"Canceled"、"Socket closed"、"Socket is closed"等等
if (e.getMessage() !=null && (e.getMessage().toLowerCase().contains("Canceled".toLowerCase()) ||
e.getMessage().toLowerCase().contains("closed".toLowerCase())) && getListener() !=null) {
getListener().onCancel();
}
}
return null;
}
};
return bodyInterceptor;
}