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;

   }

}

org.xutils.http.app.HttpRetryHandler