Volley简单封装
public interface IRequest {
/**
* 获取头部信息
*
* @return
*/
public Map<String, String> getHeaderMap();
/**
* 获取参数集合
*
* @return
*/
public Map<String, String> getParamMap();
}
public abstract class BaseRequest<T> extends Request<T> implements IRequest {
private Class<T> mClazz;
private Listener<T> mListener;
private ErrorListener mErrorListener = null;
public BaseRequest(String url, Class<T> clazz, Listener<T> listener,ErrorListener errorListener) {
this(Method.POST, url, clazz, listener, errorListener);
}
public BaseRequest(int method, String url, Class<T> clazz,
Listener<T> listener, ErrorListener errorListener) {
super(method, url, errorListener);
this.mListener = listener;
this.mErrorListener = errorListener;
this.mClazz = clazz;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> map = getHeaderMap();
if (map == null || map.size() == 0) {
return super.getHeaders();
}
return map;
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = getParamMap();
if (map == null || map.size() == 0) {
return super.getParams();
}
return map;
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
// TODO Auto-generated method stub
try {
String jsonStr = new String(response.data,HttpHeaderParser.parseCharset(response.headers));
Print.i("网络请求返回:" + jsonStr);
return Response.success(JSON.parseObject(jsonStr, mClazz),HttpHeaderParser.parseCacheHeaders(response));//fastjson解析
} catch (UnsupportedEncodingException e) {
Print.e("请求异常 -> UnsupportedEncodingException");
return Response.error(new ParseError(e));
}
}
@Override
protected void deliverResponse(T response) {
// TODO Auto-generated method stub
mListener.onResponse(response);
}
public void deliverError(VolleyError error) {
Print.e("请求异常 -> VolleyError" + error.getMessage());
if (mErrorListener != null) {
mErrorListener.onErrorResponse(error);
}
}
}
public class RequestImpl<T> extends BaseRequest<T> {
private String DESParams;// 加密参数字符串
private Map<String, Object> mParams = new HashMap<String, Object>();
public RequestImpl(String url, Class<T> clazz, Map<String, Object> params,
Listener<T> listener, ErrorListener errorListener) {
super(url, clazz, listener, errorListener);
Print.i("url:" + url);
this.mParams = params;
getBodyString();
}
public RequestImpl(int method, String url, Class<T> clazz,
Map<String, Object> params, Listener<T> listener,ErrorListener errorListener) {
super(method, url, clazz, listener, errorListener);
Print.i("url:" + url);
this.mParams = params;
getBodyString();
}
@Override
public Map<String, String> getHeaderMap() {
// TODO Auto-generated method stub
Map<String, String> headers = new HashMap<String, String>();
// 添加自己所需的全局参数
return headers;
}
@Override
public Map<String, String> getParamMap() {
// TODO Auto-generated method stub
Map<String, String> params = new HashMap<String, String>();
// 添加自己所需的全局参数
params.put("body", DESParams);
return params;
}
/**
* @return String
* @Title: getBodyString
* @Description: 获取参数信息
*/
private String getBodyString() {
String jsonString = JSON.toJSONString(mParams);//fastjson解析
Print.i("加密前参数mParams:" + jsonString);
try {
DESParams = DES.encryptThreeDESECB(jsonString,Constants.SECRETKEY);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Print.i("加密后参数DESParams:" + DESParams);
return DESParams;
}
}
public class VolleyManager {
public static final VolleyManager volleyManager = new VolleyManager();
private VolleyManager() {
}
public static VolleyManager getInstance() {
return volleyManager;
}
@SuppressWarnings("unchecked")
public <T> void requestNetwork(RequestQueue requestQueue, Class<T> clazz, String url, Map<String, Object> params, final ResultListener<T> listener) {
//此处需要请检查网络
RequestImpl request = new RequestImpl(url, clazz, params, listener, listener);
requestQueue.add(request);
}
@SuppressWarnings("unchecked")
public <T> void requestNetwork(RequestQueue requestQueue,int method, Class<T> clazz, String url, Map<String, Object> params, final ResultListener<T> listener) {
//此处需要请检查网络
RequestImpl request = new RequestImpl(method , url, clazz, params, listener, listener);
requestQueue.add(request);
}
}
public abstract class ResultListener<T> implements Listener<T>, ErrorListener {
public static final int STATUS_200 = 200;
@Override
public void onResponse(T response) {
if (response == null) {
Print.d("请求成功,请求结果为空!");
isEmpty();
return;
}
if (response instanceof BaseBean) {
BaseBean baseModel = (BaseBean) response;
if (baseModel.result == 0) {
fail(null);
} else {
success(response);
}
}
}
@Override
public void onErrorResponse(VolleyError error) {
// 请求失败!
fail(error);
}
public abstract void success(final T response);
public abstract void fail(final VolleyError error);
public abstract void isEmpty();
}
public class BaseBean implements Serializable {
private static final long serialVersionUID = -5603527602912717757L;
// 添加公有返回参数
public int result;
public String message;
}
public class Constants {
public static final String SECRETKEY = "12345678";
}
public class DES {
/**
* 加密
*
* @param src
* 明文
* @param key
* 密钥
* @return 加密后的字符串
* @throws Exception
*/
@SuppressLint({ "TrulyRandom", "DefaultLocale" })
public static String encryptThreeDESECB(String src, String key)
throws Exception {
DESKeySpec dks = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey securekey = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, securekey);
StringBuilder str = new StringBuilder();
byte[] bts = cipher.doFinal(src.getBytes());
for (byte b : bts) {
String hex = Integer.toHexString(b & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
str.append(hex.toUpperCase());
}
return str.toString();
}
}
public class Print {
public static final boolean DEBUG = true;
public static final String TAG = "DRIVER";
public static void v(String msg) {
if (DEBUG) {
Log.v(TAG, msg);
}
}
public static void v(String tag, String msg) {
if (DEBUG) {
Log.v(tag, msg);
}
}
public static void d(String msg) {
if (DEBUG) {
Log.d(TAG, msg);
}
}
public static void d(String tag, String msg) {
if (DEBUG) {
Log.d(tag, msg);
}
}
public static void e(String msg) {
if (DEBUG) {
Log.e(TAG, msg);
}
}
public static void e(String tag, String msg) {
if (DEBUG) {
Log.e(tag, msg);
}
}
public static void i(String msg) {
if (DEBUG) {
Log.i(TAG, msg);
}
}
public static void i(String tag, String msg) {
if (DEBUG) {
Log.i(tag, msg);
}
}
public static void w(String msg) {
if (DEBUG) {
Log.w(TAG, msg);
}
}
public static void w(String tag, String msg) {
if (DEBUG) {
Log.w(tag, msg);
}
}
}
Volley简单封装的更多相关文章
- volley+okhttp封装,一行代码就可访问网络
volley+okhttp封装,一行代码就可访问网络 前言: 我写这个可能不会完全的教会你去怎么封装一个网络框架,我的目的在于让你不需要你自己封装就可以访问网络,或者说互相学习也可以,我只是想让你大概 ...
- Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池
前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...
- FMDB简单封装和使用
工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...
- Android--Retrofit+RxJava的简单封装(三)
1,继续接着上一篇的讲讲,话说如果像上一篇这样的话,那么我们每一次请求一个结构都要创建一堆的Retrofit对象,而且代码都是相同的,我们可以试试封装一下 先创建一个HttpMethods类,将Ret ...
- okhttp3 get post 简单封装
最近打算在新项目中使用 okhttp3, 简单封装了一下异步 get post 因为 CallBack 也是在子线程中执行,所以用到了 Handler public class MyOkHttpCli ...
- python网页请求urllib2模块简单封装代码
这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码. 原文转自:http://www.jbxue.com/article/16585.html 对python网页请求模块ur ...
- 对pymysql的简单封装
#coding=utf-8 #!/usr/bin/python import pymysql class MYSQL: """ 对pymysql的简单封装 "& ...
- iOS开发——UI篇OC篇&UITableView简单封装
UITableView简单封装 UITableView时iOS开发中使用最多也是最重的一个UI空间,其实在App Store里面的%80以上的应用都用到了这个控件,所以就给大家介绍一下,前面的文章中也 ...
- iOS sqlite 增删改查 简单封装(基于 FMDB)
/** * 对 sqlite 的使用进行简单封装,仅涉及简单的单表 增删改查 * * 基于 FMDB * * 操作基于 model ,数据库表字段与 model 属性一一对应,对 model 整 ...
随机推荐
- linux查看父子进程
python多进程代码 http://blog.csdn.net/yfkiss/article/details/6729364 Linux下多线程查看工具(pstree.ps.pstack) tes ...
- 洛谷P3379 【模板】最近公共祖先(LCA)
P3379 [模板]最近公共祖先(LCA) 152通过 532提交 题目提供者HansBug 标签 难度普及+/提高 提交 讨论 题解 最新讨论 为什么还是超时.... 倍增怎么70!!题解好像有 ...
- 升级python2.7至python3
首先下载源tar包 可利用linux自带下载工具wget下载,如下所示: 这里我用下载的是Python-3.5.1.tar.bz2版本,下载完成后到下载目录下,解压 进入解压缩后的文件夹 cd Py ...
- MVC之路由规则 (自定义,约束,debug)
自定义路由规则的要求,小范围写在前,大范围写在后.路由规则可以注册多条,路由规则的名称不能重复路由规则有顺序,并且按照顺序进行匹配,建议小范围写在前,大范围写在后.路由规则可以设置约束 即正则表达式路 ...
- SQL Server 2012日志文件误删除数据库质疑后的相关恢复
alter database testdb set emergencyalter database testdb set single_userdbcc checkdb('testdb',REPAIR ...
- 机器学习笔记——支持向量机 (SVM)
声明: 机器学习系列主要记录自己学习机器学习算法过程中的一些参考和总结,其中有部分内容是借鉴参考书籍和参考博客的. 目录: 什么支持向量机(SVM) SVM中必须知道的概念 SVM实现过程 SVM核心 ...
- 转:10年程序员谈.Net程序员的职业规划
从事Dotnet程序开发工作近10年了,从开始的月薪3k的小程序员菜鸟,到现在年薪60w的项目总经理,从战战兢兢的去各个公司应聘,到现在开始面试那些战战兢兢的小程序员,回想起这近十年来的经验,看着还是 ...
- Session操作
存储API localStorage和sessionStorage通常被当做普通的JavaScript对象使用:通过设置属性来存储字符串值,查询该属性来读取该值.除此之外,这两个对象还提供了更加正式的 ...
- lambda匿名函数
1.python中的匿名函数的格式 lambda arg1,arg2...,argN:expression (lambda关键字后,冒号":"前是参数,多个参数用逗号&qu ...
- 关于安卓开发当中通过java自带的HttpURLConnection访问XML的java.io.EOFException问题
刚接触安卓开发,试着写个小程序熟悉下,就写了天气预报的小程序,通过httpUrlConnection读流的方式来获取网络公共接口提供的天气XML信息.但在建立http连接时一直报java.io.EOF ...