// Path: devpkg-android/src/main/java/org/senydevpkg/utils/ALog.java
// public class ALog {
//     /**
//      * Application TAG,use "logcat -s TAG"
//      */
//     private static String TAG = "ALOG";
// 
// 
//     private static boolean IS_FULL_CLASSNAME;
// 
//     /**
//      * log level
//      */
//     private static int LOG_LEVEL = Log.VERBOSE;
// 
//     /**
//      * print full class name or not
//      *
//      * @param isFullClassName
//      */
//     public static void setFullClassName(boolean isFullClassName) {
//         ALog.IS_FULL_CLASSNAME = isFullClassName;
//     }
// 
//     /**
//      * set log level, default Log.VERBOSE
//      *
//      * @param level
//      */
//     public static void setLogLevel(int level) {
//         ALog.LOG_LEVEL = level;
//     }
// 
//     /**
//      * set application TAG, default "ALOG"
//      *
//      * @param tag
//      */
//     public static void setAppTAG(String tag) {
//         ALog.TAG = tag;
//     }
// 
// 
//     public static void v(String msg) {
//         if (LOG_LEVEL <= Log.VERBOSE) {
//             Log.v(TAG, getLogTitle() + msg);
//         }
//     }
// 
// 
//     public static void d(String msg) {
//         if (LOG_LEVEL <= Log.DEBUG) {
//             Log.d(TAG, getLogTitle() + msg);
//         }
//     }
// 
//     public static void i(String msg) {
//         if (LOG_LEVEL <= Log.INFO) {
//             Log.i(TAG, getLogTitle() + msg);
//         }
//     }
// 
//     public static void w(String msg) {
//         if (LOG_LEVEL <= Log.WARN) {
//             Log.w(TAG, getLogTitle() + msg);
//         }
//     }
// 
//     public static void e(String msg) {
//         if (LOG_LEVEL <= Log.ERROR) {
//             Log.e(TAG, getLogTitle() + msg);
//         }
//     }
// 
//     /**
//      * make log title
//      *
//      * @return
//      */
//     private static String getLogTitle() {
//         StackTraceElement elm = Thread.currentThread().getStackTrace()[4];
//         String className = elm.getClassName();
//         if (!IS_FULL_CLASSNAME) {
//             int dot = className.lastIndexOf('.');
//             if (dot != -1) {
//                 className = className.substring(dot + 1);
//             }
//         }
//         return className + "." + elm.getMethodName() + "(" + elm.getLineNumber() + ")" + ": ";
//     }
// 
// 
// }
// 
// Path: devpkg-android/src/main/java/org/senydevpkg/utils/MD5Utils.java
// public class MD5Utils {
// 
//     /**
//      * 获取字符串加密
//      *
//      * @param string
//      * @return
//      */
//     public static String encode(String string) {
//         try {
//             MessageDigest md = MessageDigest.getInstance("MD5");
//             byte[] bs = md.digest(string.getBytes());
//             StringBuilder sb = new StringBuilder();
//             for (byte b : bs) {
//                 int num = b & 0xff;
//                 String hex = Integer.toHexString(num);
//                 if (hex.length() == 1) {
//                     sb.append(0);
//                 }
//                 sb.append(b);
//             }
//             return sb.toString();
// 
//         } catch (Exception e) {
//             e.printStackTrace();
//             return null;
//         }
//     }
// 
//     /**
//      * 获取文件MD5
//      *
//      * @param file
//      * @return
//      * @throws FileNotFoundException
//      */
//     public static String encode(File file) throws FileNotFoundException {
//         String value = null;
//         FileInputStream in = null;
//         try {
//             in = new FileInputStream(file);
//             MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length());
//             MessageDigest md5 = MessageDigest.getInstance("MD5");
//             md5.update(byteBuffer);
//             BigInteger bi = new BigInteger(1, md5.digest());
//             value = bi.toString(16);
//         } catch (Exception e) {
//             e.printStackTrace();
//         } finally {
//             if (null != in) {
//                 try {
//                     in.close();
//                 } catch (IOException e) {
//                     e.printStackTrace();
//                 }
//             }
//         }
//         return value;
//     }
// 
// }


import android.content.Context;
import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import org.senydevpkg.utils.ALog;
import org.senydevpkg.utils.MD5Utils;
import org.springframework.util.Assert;
import org.springframework.util.FileCopyUtils;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;
     *
     * @return GSON解析的对象字节码
     */
    public Class<? extends T> getClazz() {
        return mClazz;
    }

    @Override
    public Map<String, String> getParams() {
        return mParams;
    }

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        return mHeaders == null ? super.getHeaders() : mHeaders;
    }

    @Override
    protected void deliverResponse(T response) {
        if (mListener != null) {
            mListener.onResponse(response);
        }
    }

    @Override
    protected Response<T> parseNetworkResponse(NetworkResponse response) {
        try {
            String json = new String(
                    response.data,
                    HttpHeaderParser.parseCharset(response.headers));
// Path: devpkg-android/src/main/java/org/senydevpkg/utils/ALog.java
// public class ALog {
//     /**
//      * Application TAG,use "logcat -s TAG"
//      */
//     private static String TAG = "ALOG";
// 
// 
//     private static boolean IS_FULL_CLASSNAME;
// 
//     /**
//      * log level
//      */
//     private static int LOG_LEVEL = Log.VERBOSE;
// 
//     /**
//      * print full class name or not
//      *
//      * @param isFullClassName
//      */
//     public static void setFullClassName(boolean isFullClassName) {
//         ALog.IS_FULL_CLASSNAME = isFullClassName;
//     }
// 
//     /**
//      * set log level, default Log.VERBOSE
//      *
//      * @param level
//      */
//     public static void setLogLevel(int level) {
//         ALog.LOG_LEVEL = level;
//     }
// 
//     /**
//      * set application TAG, default "ALOG"
//      *
//      * @param tag
//      */
//     public static void setAppTAG(String tag) {
//         ALog.TAG = tag;
//     }
// 
// 
//     public static void v(String msg) {
//         if (LOG_LEVEL <= Log.VERBOSE) {
//             Log.v(TAG, getLogTitle() + msg);
//         }
//     }
// 
// 
//     public static void d(String msg) {
//         if (LOG_LEVEL <= Log.DEBUG) {
//             Log.d(TAG, getLogTitle() + msg);
//         }
//     }
// 
//     public static void i(String msg) {
//         if (LOG_LEVEL <= Log.INFO) {
//             Log.i(TAG, getLogTitle() + msg);
//         }
//     }
// 
//     public static void w(String msg) {
//         if (LOG_LEVEL <= Log.WARN) {
//             Log.w(TAG, getLogTitle() + msg);
//         }
//     }
// 
//     public static void e(String msg) {
//         if (LOG_LEVEL <= Log.ERROR) {
//             Log.e(TAG, getLogTitle() + msg);
//         }
//     }
// 
//     /**
//      * make log title
//      *
//      * @return
//      */
//     private static String getLogTitle() {
//         StackTraceElement elm = Thread.currentThread().getStackTrace()[4];
//         String className = elm.getClassName();
//         if (!IS_FULL_CLASSNAME) {
//             int dot = className.lastIndexOf('.');
//             if (dot != -1) {
//                 className = className.substring(dot + 1);
//             }
//         }
//         return className + "." + elm.getMethodName() + "(" + elm.getLineNumber() + ")" + ": ";
//     }
// 
// 
// }
// 
// Path: devpkg-android/src/main/java/org/senydevpkg/utils/MD5Utils.java
// public class MD5Utils {
// 
//     /**
//      * 获取字符串加密
//      *
//      * @param string
//      * @return
//      */
//     public static String encode(String string) {
//         try {
//             MessageDigest md = MessageDigest.getInstance("MD5");
//             byte[] bs = md.digest(string.getBytes());
//             StringBuilder sb = new StringBuilder();
//             for (byte b : bs) {
//                 int num = b & 0xff;
//                 String hex = Integer.toHexString(num);
//                 if (hex.length() == 1) {
//                     sb.append(0);
//                 }
//                 sb.append(b);
//             }
//             return sb.toString();
// 
//         } catch (Exception e) {
//             e.printStackTrace();
//             return null;
//         }
//     }
// 
//     /**
//      * 获取文件MD5
//      *
//      * @param file
//      * @return
//      * @throws FileNotFoundException
//      */
//     public static String encode(File file) throws FileNotFoundException {
//         String value = null;
//         FileInputStream in = null;
//         try {
//             in = new FileInputStream(file);
//             MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length());
//             MessageDigest md5 = MessageDigest.getInstance("MD5");
//             md5.update(byteBuffer);
//             BigInteger bi = new BigInteger(1, md5.digest());
//             value = bi.toString(16);
//         } catch (Exception e) {
//             e.printStackTrace();
//         } finally {
//             if (null != in) {
//                 try {
//                     in.close();
//                 } catch (IOException e) {
//                     e.printStackTrace();
//                 }
//             }
//         }
//         return value;
//     }
// 
// }


// Path: devpkg-android/src/main/java/org/senydevpkg/net/GsonRequest.java
import android.content.Context;
import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import org.senydevpkg.utils.ALog;
import org.senydevpkg.utils.MD5Utils;
import org.springframework.util.Assert;
import org.springframework.util.FileCopyUtils;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;

     *
     * @return GSON解析的对象字节码
     */
    public Class<? extends T> getClazz() {
        return mClazz;
    }

    @Override
    public Map<String, String> getParams() {
        return mParams;
    }

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        return mHeaders == null ? super.getHeaders() : mHeaders;
    }

    @Override
    protected void deliverResponse(T response) {
        if (mListener != null) {
            mListener.onResponse(response);
        }
    }

    @Override
    protected Response<T> parseNetworkResponse(NetworkResponse response) {
        try {
            String json = new String(
                    response.data,
                    HttpHeaderParser.parseCharset(response.headers));
            ALog.d(json);