Volly的简单封装
今天简单说下Volly框架的简单封装,包括请求头,请求body,请求方法等的简单封装,这篇是呼应上一篇的,呼应上一个的介绍使用
首先要说的就是VollyBean,都是get,set没啥解释的
import java.util.Map;/*** @author penguinfool* Volly通信请求类*/
public class VollyBean {int method;String url;Map<String, String> headers;Map<String, String> params;/*** 构造函数*/public VollyBean() {super();}/*** @param method 请求类型* @param url 请求地址* @param headers 请求头* @param params 请求参数*/public VollyBean(int method, String url, Map<String, String> headers,Map<String, String> params) {super();this.method = method;this.url = url;this.headers = headers;this.params = params;}/*** @return 请求类型*/public int getMethod() {return method;}/*** @param method 请求类型*/public void setMethod(int method) {this.method = method;}/*** @return 请求地址*/public String getUrl() {return url;}/*** @param url 请求地址*/public void setUrl(String url) {this.url = url;}/*** @return 请求头*/public Map<String, String> getHeaders() {return headers;}/*** @param headers 请求头*/public void setHeaders(Map<String, String> headers) {this.headers = headers;}/*** @return 请求参数*/public Map<String, String> getParams() {return params;}/*** @param params 请求参数*/public void setParams(Map<String, String> params) {this.params = params;}}
VollyRequestManager类,这里面封装了请求的方法,请求头等,他的请求成功和失败都是Volly框架中封装好的,我们可以自定义一个回调,将结果回调到我们所需的界面上
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;import android.content.Context;import com.android.volley.AuthFailureError;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request.Method;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.rgsc.base.core.net.NetUtils;/*** @author penguinfool* 请求管理类*/
public class VollyRequestManager {private static final String TAG = "VollyRequestManager";private static volatile VollyRequestManager instance = null;private RequestQueue mRequestQueue = null;private static final int TIMEOUT = 5000;/*** @param context* 上下文*/private VollyRequestManager(Context context) {initRequestqueue(context);}/*** 初始化mRequestQueue* * @param context* 上下文*/public void initRequestqueue(Context context) {this.mRequestQueue = Volley.newRequestQueue(context);}/*** @param context* 上下文* @return 单例*/public static VollyRequestManager getInstance(Context context) {if (null == instance) {synchronized (VollyRequestManager.class) {if (null == instance) {instance = new VollyRequestManager(context);}}}return instance;}/*** @return 请求队列*/public RequestQueue getRequestQueue() {return this.mRequestQueue;}/*** @param url* 请求地址* @param headers* 请求头* @param params* 请求参数* @param successListener* 成功监听* @param errorListener* 失败监听* @throws UnsupportedEncodingException* 异常*/private void doGet(String url, final Map<String, String> headers,final Map<String, String> params,Response.Listener<String> successListener,Response.ErrorListener errorListener)throws UnsupportedEncodingException {String requestUrl = null;// 如果是GET请求,则请求参数在URL中if (params != null && !params.isEmpty()) {String param = urlEncode(params);requestUrl = url + "?" + param;} else {requestUrl = url;}System.out.println("### volley requet:" + url);StringRequest stringRequest = new StringRequest(Method.GET, requestUrl,successListener, errorListener) {// 设置头信息@Overridepublic Map<String, String> getHeaders() throws AuthFailureError {if (headers != null && !headers.isEmpty()) {return headers;} else {return Collections.emptyMap();}}// 为空时参数params传入null@Overrideprotected Map<String, String> getParams() throws AuthFailureError {return params;}};stringRequest.setRetryPolicy(new DefaultRetryPolicy(TIMEOUT,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));mRequestQueue.add(stringRequest);}/*** @param url* 请求地址* @param headers* 请求头* @param params* 请求参数* @param successListener* 成功监听* @param errorListener* 失败监听*/private void doPost(String url, final Map<String, String> headers,final Map<String, String> params,Response.Listener<String> successListener,Response.ErrorListener errorListener) {// L.i(TAG + "doPost", url);// for (Map.Entry<String, String> entry :headers.entrySet()) {// System.out.println("hkey= " + entry.getKey() + " and hvalue= " +// entry.getValue());// }////// for (Map.Entry<String, String> entry :params.entrySet()) {// System.out.println("pkey= " + entry.getKey() + " and pvalue= " +// entry.getValue());// }StringRequest stringRequest = new StringRequest(Method.POST, url,successListener, errorListener) {@Overrideprotected Map<String, String> getParams() throws AuthFailureError {return params;}@Overridepublic Map<String, String> getHeaders() throws AuthFailureError {if (headers != null && !headers.isEmpty()) {return headers;} else {return Collections.emptyMap();}}};stringRequest.setRetryPolicy(new DefaultRetryPolicy(TIMEOUT,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));mRequestQueue.add(stringRequest);}/*** @param url* 请求地址* @param headers* 请求头* @param params* 请求参数* @param successListener* 成功监听* @param errorListener* 失败监听* @throws Exception* 异常*/private void doPut(String url, final Map<String, String> headers,final Map<String, String> params,Response.Listener<String> successListener,Response.ErrorListener errorListener) {String requestUrl = null;/** if (params != null && !params.isEmpty()) { String param =* urlEncode(params); requestUrl = url + "?" + param; } else {* requestUrl = url; } L.i(TAG, requestUrl);*/StringRequest stringRequest = new StringRequest(Method.PUT, url,successListener, errorListener) {// 设置头信息@Overridepublic Map<String, String> getHeaders() throws AuthFailureError {if (headers != null && !headers.isEmpty()) {return headers;} else {return Collections.emptyMap();}}@Overrideprotected Map<String, String> getParams() throws AuthFailureError {return params;}};stringRequest.setRetryPolicy(new DefaultRetryPolicy(TIMEOUT,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));mRequestQueue.add(stringRequest);}/*** 缺省,不推荐使用*/private void doDelete() {// .......}/*** @param vollyBean* 请求bean* @param successListener* 成功监听* @param errorListener* 失败监听* @throws UnsupportedEncodingException* 异常*/public void request(VollyBean vollyBean,Response.Listener<String> successListener,Response.ErrorListener errorListener)throws UnsupportedEncodingException {if (NetUtils.isAvailable()) {switch (vollyBean.getMethod()) {case Method.GET:doGet(vollyBean.getUrl(), vollyBean.getHeaders(),vollyBean.getParams(), successListener, errorListener);break;case Method.POST:doPost(vollyBean.getUrl(), vollyBean.getHeaders(),vollyBean.getParams(), successListener, errorListener);break;case Method.PUT:doPut(vollyBean.getUrl(), vollyBean.getHeaders(),vollyBean.getParams(), successListener, errorListener);break;case Method.DELETE:doDelete();break;default:break;}} else {errorListener.onErrorResponse(null);}}/*** @param params* 请求参数* @return 进行urlEncode后的请求地址* @throws UnsupportedEncodingException* 异常*/private String urlEncode(Map<String, String> params)throws UnsupportedEncodingException {Iterator<String> iter = params.keySet().iterator();int i = 0;StringBuffer sb = new StringBuffer();while (iter.hasNext()) {String key = iter.next();String value = params.get(key);if (i != 0) {sb.append("&");}sb.append(key);sb.append("=");sb.append(URLEncoder.encode(value, "utf-8").toString());i++;}return sb.toString();}
}
/*** **/
public class VollyBeanFactory {private static VollyBeanFactory instance = new VollyBeanFactory();/*** 私有构造函数*/private VollyBeanFactory() {}/*** @return 单例*/public static VollyBeanFactory getInstance() {if (instance == null) {synchronized (VollyBeanFactory.class) {instance = new VollyBeanFactory();}}return instance;}/*** @param username* 用户名* @param pwd* 密码* @return 请求bean*/public VollyBean getLoginBean(String username, String pwd) {Map<String, String> params = new HashMap<String, String>();params.put(Constant.HTTP_PARAM_USERNAME, username);params.put(Constant.HTTP_PARAM_PWD, pwd);VollyBean vollyBean = new VollyBean();vollyBean.setMethod(Method.POST);// 设置请求方式SLog.console("请求地址:" + ServerConfig.getInstance().getServerUrl());vollyBean.setUrl(ServerConfig.getInstance().getServerUrl()); // 设置请求地址Map<String, String> header = new HashMap<String, String>();header.put("Content-Type", "application/x-www-form-urldecoded");vollyBean.setHeaders(header); // 设置请求头vollyBean.setParams(params); // 设置请求参数return vollyBean;}
}
接下来看下实际的调用
public void log(String username, String pwd,Response.Listener<String> successListener,Response.ErrorListener errorListener)throws UnsupportedEncodingException {VollyBean bean = VollyBeanFactory.getInstance().getLoginBean(username,pwd);man.request(bean, successListener, errorListener);}
Volly基本就是这个样子了,注意哈,Volly是有jar包的,上网上随便下载一个就行
Volly的简单封装相关推荐
- Android APP更新下载工具类——简单封装DownloadManager
几乎所有APP都包含了检查更新功能,更新下载功能的实现方式常用的有两种:1.使用App网络框架的文件下载请求:2.使用自带的DownloadManager类:本文介绍第二种,简单封装一下Downloa ...
- 简单封装浏览器 cookie 工具类
版权声明:本文首发 http://asing1elife.com ,转载请注明出处. https://blog.csdn.net/asing1elife/article/details/8265571 ...
- 小程序简单封装 request 请求
我在这里做了详细的介绍 : 小程序简单封装 request 请求 转载于:https://www.cnblogs.com/biangz/p/9984340.html
- 简单封装 HTTP 请求
2017-2-19 更新到第二版: 源码地址:http://git.oschina.net/sp42/ajaxjs/tree/master/ajaxjs-base/src/com/ajaxjs/net ...
- 【JDBC】实现对JDBC 连接的简单封装
package util;import java.sql.Connection; import java.sql.DriverManager;/**** 实现对JDBC 的封装* @author mq ...
- Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池
前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...
- ios开发之使用多文件上传的简单封装最原始的
ios开发之使用多文件上传的简单封装最原始的 // // ViewController.m // 18-上传多个文件 // // Created by 鲁军 on 2021/2/13. //#impo ...
- Spring jdbc 对象Mapper的简单封装
一般查询实体的时候,都需要这么使用/** * 根据id查询 * * @return */ public Emp queryEmpById(Intege ...
- Google图片加载库Glide的简单封装GlideUtils
Google图片加载库Glide的简单封装GlideUtils
最新文章
- 把Nginx注册成Windows的系统服务
- iphone储存空间系统怎么清理_iPhone储存空间里其他占了几十GB,怎样彻底删除它?...
- 红外报警c语言,基于单片机的红外报警系统设计 (毕业论文).docx
- Testin云測试破7000万次:崩溃成90%手游应用质量难题
- selenium的定位方式
- matlab的数据类型ppt,MATLAB数据类型
- 路由器刷机教程图解_斐讯路由器K1/K2/K2P系列刷机流程图文教程
- NetVLAD: CNN architecture for weakly supervised place recognition 翻译
- 台式电脑 航嘉机箱 前面板耳机只有一边(左边)有声音 问题解决
- 快播宣称将转型关闭QVOD服务器
- 23位子网掩码是多少_23位子网掩码包含哪几个网段
- Pytho解析器的安装及配置
- openwrt和srun的两三事
- ITS Mobile Template interpretation failed. Template does not exist
- numpy均匀分布_Numpy的基本操作
- 存储芯片涨价:助芯片制造商美光科技业绩连超预期
- Dagger2的使用总结
- Content(内容)
- GPFS文件系统分析
- 企业发现数据泄露威胁时如何应对