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 整 ...
随机推荐
- db2数据库安装注意几个问题
1.安装数据库的时候,db2用户使用的是系统中的用户.创建完数据库你会发现你电脑多了一个用户(可以在控制面板中查看到) 2.安装完数据库需要创建数据库.打开命令行cmd(注意一定要用管理员身份打开,不 ...
- C语言实现GPT头和分区表的读取(gcc)
#include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <string.h&g ...
- Log.properties配置详解
一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...
- S2SH CRUD 整合
采用的框架 Struts2+Spring4+Hbiernate4. 目录结构 : EmployeeAction: package com.xx.ssh.actions; import java. ...
- Oracle decode()函数应用
在项目第一次遇到decode()函数,简单写一下用法. ')), ')), ')), ')), ')), ')), ')) from wg_jzmb jz, wg_jzfz fz where jz.s ...
- 关于C中struct和union长度的详解
这几天看<代码大全>中的第十三章---不常见的数据类型,里面讲解到了C语言中的struct以及对指针的解释,联想到以前看过相关的关于C语言中stuct长度的文章,只是现在有些淡忘了,因此今 ...
- MySQL 第十天(视图、存储过程、函数、触发器)
MySql高级-视图.函数.存储过程.触发器 目录 一.视图 1 1.视图的定义 1 2.视图的作用 1 (1)可以简化查询. 1 (2)可以进行权限控制, 3 3.查询 ...
- 30款最好的 Bootstrap 3.0 免费主题和模板
Twitter Bootstrap 框架已经广为人知,用于加快网站,应用程序或主题的界面开发,并被公认为是迄今对于 Web 开发的最有实质性帮助的工具之一.在此之前的,各种各样的界面库伴随着高昂的维护 ...
- webform文件的上传
文件上传 (控件:Fileupload) --文件映射:Server.MapPath(path)(相 对转绝对路径)--保存到指定路径:Fileupload.SaveAs 例子:点击按钮,获取上传图片 ...
- 《CoffeeScript应用开发》学习:第三章-构建简单的应用程序
字符串插值 CoffeeScript提供了一种更好的构建字符串的解决方案.在双引号字符串(单引号无效)中使用#{}包含一个动态的值. str = 'Hello, CoffeeScript.' cons ...