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 整 ...
随机推荐
- 安装了多个Oracle11g的客户端,哪个客户端的tnsnames.ora会起作用?
如果我们由于需要安装了多个Oracle的client,哪个客户端的tnsnames.ora会起作用呢? 答案是: 在安装好clinent端后,安装程序会把client的bin目录放到path里面,pa ...
- iOS 趣谈设计模式——通知
[前言介绍] iOS的一种设计模式,观察者Observer模式(也叫发布/订阅,即Publich/Subscribe模式). 观察者模式,包含了通知机制(notification)和KVO(Key-v ...
- clientTop、offsetTop和scrollTop的区分
页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: document.body.offse ...
- [转]逻辑斯蒂回归 via python
# -*- coding:UTF-8 -*-import numpydef loadDataSet(): return dataMat,labelMat def sigmoid(inX): retur ...
- 【c++】虚基类
何要使用虚基类: 为何避免多层继承中出项多个公共基类所造成的歧义现象 虚基类用法 派生类继承基类时,加上一个virtual关键词则为虚拟基类继承. 在上图程序运行中,我们发现class bass的构造 ...
- $(document).ready()方法和window.onload区别
事件: javascript 和 HTML之间的交互式通过用户和浏览器操作页面时引发的事件来处理的.当文档或者它的某些元素发生某些变化和操作时,浏览器会自动生成一个事件:例如:当用户单击某个按钮时,也 ...
- ADOConnectoin事务和存储过程中的Begin tran commit
一直以来我都是在存储过程中使用事务 create proc usp_proc begin begin tran ..... commit end 那么我现在问一个问题,如果在BCB的代码中写这样的代 ...
- TestLink安装及整合Jira
TestLink安装及整合Jira 1.Testlink 安装部署 Testlink是一个开源的测试管理工具,主要用于管理测试用例,从测试需求.测试计划.测试用例管理和用例执行,到最后的结果分析,一套 ...
- X86架构与ARM架构比较(摘录自网络)
引言 CPU是怎样运作的? CPU的运作与人脑的运作差不多.先谈一下人这个系统的工作方式.眼镜.耳朵.舌头.皮肤等等感觉器官接收到"触觉",把信息传给大脑,大脑把信息处理后,把处理 ...
- 【初学者教程】在电脑上安装Python,写第一个程序
欢迎来到Python的世界 1.存在Python 2和Python 3两个版本,我该用哪个?如果书是关于2的,下载2:如果书是关于3的,就下载3.建议用Python 3,不过用2也是可以的. 2.下载 ...