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 整 ...
随机推荐
- 2.2 ARM处理器工作模式
ARM Architecture Reference Manual Arm 指令框架手册 种工作模式 Processor mode Mode number Description User usr 0 ...
- iOS各种开源类库
KissXml——xml解析库 相关教程:http://www.iteye.com/topic/625849 http://sencho.blog.163.com/blog/static/830562 ...
- ckeditor插件
插件下载地址:http://ckeditor.com/download 1.CKeditor配置 在html页面的<head>标签中引入核心文件 ckeditor.js <scrip ...
- 浅谈数位DP
在了解数位dp之前,先来看一个问题: 例1.求a~b中不包含49的数的个数. 0 < a.b < 2*10^9 注意到n的数据范围非常大,暴力求解是不可能的,考虑dp,如果直接记录下数字, ...
- Commons-Collections 集合工具类的使用
package com.bjsxt.others.commons; import java.util.ArrayList; import java.util.List; import org.apac ...
- LR12.53—第3课:重播Vuser脚本
第3课:重播Vuser脚本 在前面的教训,你记录了一组典型的用户行为,并准备重播脚本. 重播脚本之前,您可以配置脚本的运行时设置,它定义了Vuser的行为. 注:记录与基于Web的协议的地方WebTo ...
- cacti应用
cacti被很多IDC/CDN提供商用来进行带宽计算使用:带宽的95计费(95th Percentile charging) 95计费法是CDN常用计费方法: CDN基本上是每月结一次款.每5分钟取一 ...
- C#正则提取html图片等
去除html标记,比较实用,分享给大家. /// <summary> /// 去除HTML标记 /// </summary> /// <par ...
- jquery实现静态html文件的include嵌入效果
//引入jQuery的js 建立footer.html,内容为要嵌入的内容. 在需要嵌入的页面中加入: $.get("footer.html",function(data){ $( ...
- HP_UX系统批量创建LV或raw设备的Shell 脚本
mkdir /dev/yjfsvg02 #创建lvm v2.0的VG,PE Size=64MB,不需要执行mknod创建group文件了.vgcreate -V 2.0 -s 64 -S 10t /d ...