org.xutils.http.app.HttpRetryHandler
package org.xutils.http.app;
import org.json.JSONException;
import org.xutils.common.Callback;
import org.xutils.common.util.LogUtil;
import org.xutils.ex.HttpException;
import org.xutils.http.HttpMethod;
import org.xutils.http.request.UriRequest;
import java.io.FileNotFoundException;
import java.net.MalformedURLException;
import java.net.NoRouteToHostException;
import java.net.PortUnreachableException;
import java.net.ProtocolException;
import java.net.URISyntaxException;
import java.net.UnknownHostException;
import java.util.HashSet;
/**
* @author 注释者:王教成
* @version 注释版:1.0.0
* 网络重试处理器
*/
public class HttpRetryHandler {
protected int maxRetryCount = 2;//定义最大重试次数初始值2
protected static HashSet<Class<?>> blackList = new HashSet<Class<?>>();//创建黑名单HashMap
static {
blackList.add(HttpException.class);//添加网络异常类
blackList.add(Callback.CancelledException.class);//添加已取消异常类
blackList.add(MalformedURLException.class);//添加畸形URL异常类
blackList.add(URISyntaxException.class);//添加URI语法异常类
blackList.add(NoRouteToHostException.class);//添加无通向主机路由异常类
blackList.add(PortUnreachableException.class);//添加端口不可达异常类
blackList.add(ProtocolException.class);//添加协议异常类
blackList.add(NullPointerException.class);//添加空指针异常类
blackList.add(FileNotFoundException.class);//添加文件未发现异常
blackList.add(JSONException.class);//添加JSON异常类
blackList.add(UnknownHostException.class);//添加未知主机异常类
blackList.add(IllegalArgumentException.class);//添加非法参数异常类
}//静态初始化块
public HttpRetryHandler() {
}//构造器
/**
* 设置最大重试次数
* @param maxRetryCount 最大重试次数
*/
public void setMaxRetryCount(int maxRetryCount) {
this.maxRetryCount = maxRetryCount;
}
/**
* 是否可重试
* @param request Uri请求参数
* @param ex 异常
* @param count 计数
* @return 返回是否可重试
*/
public boolean canRetry(UriRequest request, Throwable ex, int count) {
LogUtil.w(ex.getMessage(), ex);//记录日志
if (count > maxRetryCount) {
LogUtil.w(request.toString());//如果计数大于最大重试次数,记录日志
LogUtil.w("The Max Retry times has been reached!");
return false;
}
if (!HttpMethod.permitsRetry(request.getParams().getMethod())) {
LogUtil.w(request.toString());//如果不允许重试,记录日志
LogUtil.w("The Request Method can not be retried.");
return false;
}
if (blackList.contains(ex.getClass())) {
LogUtil.w(request.toString());//如果黑名单包含异常类,记录日志
LogUtil.w("The Exception can not be retried.");
return false;
}
return true;
}
}