// Path: architecture/src/main/java/com/jiang/android/architecture/okhttp/callback/BaseCallBack.java
// public abstract class BaseCallBack<T> {
// 
//     /**
//      * 失败
//      *
//      * @param ret 数据
//      */
//     public abstract void onFail(ws_ret ret);  //失败
// 
//     /**
//      * 成功
//      *
//      * @param t 数据
//      */
//     public abstract void onSuccess(T t);  //成功
// 
// 
//     /**
//      * 无数据， 只在get中用到
//      *
//      * @param ret 数据
//      */
//     public abstract void onNoData(ws_ret ret); //无数据， 注意： 当是post请求的时候该方法不会回调
// 
//     /**
//      * 网络请求开始时执行
//      */
//     public abstract void onBefore();
// 
//     /**
//      * 网络请求结束时执行， 比如停止下拉刷新控件的执行
//      */
//     public abstract void onAfter();
// 
//     /**
//      * 所有的网络请求成功以后都会走这个方法，
//      *
//      * @param response 数据
//      */
//     public abstract void onFinishResponse(Response response);
// 
//     /**
//      * 下载文件事 的进度
//      *
//      * @param progress 进度
//      */
//     public abstract void onProgress(long progress);
// 
//     /**
//      * 获得泛型的类型
//      */
//     public Type mType;
// 
//     public BaseCallBack() {
//         mType = getSuperclassTypeParameter(getClass());
//     }
// 
//     static Type getSuperclassTypeParameter(Class<?> subclass) {
//         Type superclass = subclass.getGenericSuperclass();
//         if (superclass instanceof Class) {
//             throw new RuntimeException("泛型参数不能为空");
//         }
//         ParameterizedType parameterized = (ParameterizedType) superclass;
//         return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);
//     }
// }
// 
// Path: architecture/src/main/java/com/jiang/android/architecture/okhttp/exception/NotPermissionException.java
// public class NotPermissionException extends RuntimeException {
// 
//     private static final long serialVersionUID = 110L;
// 
//     public NotPermissionException() {
//     }
// 
//     public NotPermissionException(String detailMessage) {
//         super(detailMessage);
//     }
// }


import com.jiang.android.architecture.okhttp.callback.BaseCallBack;
import com.jiang.android.architecture.okhttp.exception.NotPermissionException;
import java.util.ArrayList;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
import android.text.TextUtils;
            this.callBack = c;
            type = OkHttpTask.TYPE_GET;
            if (validateParams()) {
                downLoadFile(url, path, fileName, callBack, tag);
            }
        }

        public void execute(BaseCallBack c) {
            this.callBack = c;
            if (validateParams()) {
                doJob(url, tag, params, callBack, headers, type);
            }
        }

        /**
         * 上传文件必传
         * url,files,header(用来验证),callBack
         *
         * @param c
         */
        public void upload(BaseCallBack c) {
            this.callBack = c;
            type = OkHttpTask.TYPE_POST;
            if (validateParams()) {
                uploadFile(url, headers, files, callBack, tag);
            }
        }

        private boolean validateParams() {
            if (TextUtils.isEmpty(url) || !url.startsWith("http")) {
// Path: architecture/src/main/java/com/jiang/android/architecture/okhttp/callback/BaseCallBack.java
// public abstract class BaseCallBack<T> {
// 
//     /**
//      * 失败
//      *
//      * @param ret 数据
//      */
//     public abstract void onFail(ws_ret ret);  //失败
// 
//     /**
//      * 成功
//      *
//      * @param t 数据
//      */
//     public abstract void onSuccess(T t);  //成功
// 
// 
//     /**
//      * 无数据， 只在get中用到
//      *
//      * @param ret 数据
//      */
//     public abstract void onNoData(ws_ret ret); //无数据， 注意： 当是post请求的时候该方法不会回调
// 
//     /**
//      * 网络请求开始时执行
//      */
//     public abstract void onBefore();
// 
//     /**
//      * 网络请求结束时执行， 比如停止下拉刷新控件的执行
//      */
//     public abstract void onAfter();
// 
//     /**
//      * 所有的网络请求成功以后都会走这个方法，
//      *
//      * @param response 数据
//      */
//     public abstract void onFinishResponse(Response response);
// 
//     /**
//      * 下载文件事 的进度
//      *
//      * @param progress 进度
//      */
//     public abstract void onProgress(long progress);
// 
//     /**
//      * 获得泛型的类型
//      */
//     public Type mType;
// 
//     public BaseCallBack() {
//         mType = getSuperclassTypeParameter(getClass());
//     }
// 
//     static Type getSuperclassTypeParameter(Class<?> subclass) {
//         Type superclass = subclass.getGenericSuperclass();
//         if (superclass instanceof Class) {
//             throw new RuntimeException("泛型参数不能为空");
//         }
//         ParameterizedType parameterized = (ParameterizedType) superclass;
//         return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);
//     }
// }
// 
// Path: architecture/src/main/java/com/jiang/android/architecture/okhttp/exception/NotPermissionException.java
// public class NotPermissionException extends RuntimeException {
// 
//     private static final long serialVersionUID = 110L;
// 
//     public NotPermissionException() {
//     }
// 
//     public NotPermissionException(String detailMessage) {
//         super(detailMessage);
//     }
// }


// Path: architecture/src/main/java/com/jiang/android/architecture/okhttp/OkHttpRequest.java
import com.jiang.android.architecture.okhttp.callback.BaseCallBack;
import com.jiang.android.architecture.okhttp.exception.NotPermissionException;
import java.util.ArrayList;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
import android.text.TextUtils;

            this.callBack = c;
            type = OkHttpTask.TYPE_GET;
            if (validateParams()) {
                downLoadFile(url, path, fileName, callBack, tag);
            }
        }

        public void execute(BaseCallBack c) {
            this.callBack = c;
            if (validateParams()) {
                doJob(url, tag, params, callBack, headers, type);
            }
        }

        /**
         * 上传文件必传
         * url,files,header(用来验证),callBack
         *
         * @param c
         */
        public void upload(BaseCallBack c) {
            this.callBack = c;
            type = OkHttpTask.TYPE_POST;
            if (validateParams()) {
                uploadFile(url, headers, files, callBack, tag);
            }
        }

        private boolean validateParams() {
            if (TextUtils.isEmpty(url) || !url.startsWith("http")) {
                throw new NotPermissionException("url不合法");