今天简单说下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;
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) {
@Override
public Map<String, String>
getHeaders()
throws AuthFailureError {
if (headers !=
null && !headers.isEmpty()) {
return headers;
}
else {
return Collections.emptyMap();
}
}
@Override
protected 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) {
StringRequest stringRequest =
new StringRequest(Method.POST, url,
successListener, errorListener) {
@Override
protected Map<String, String>
getParams()
throws AuthFailureError {
return params;
}
@Override
public 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;
StringRequest stringRequest =
new StringRequest(Method.PUT, url,
successListener, errorListener) {
@Override
public Map<String, String>
getHeaders()
throws AuthFailureError {
if (headers !=
null && !headers.isEmpty()) {
return headers;
}
else {
return Collections.emptyMap();
}
}
@Override
protected 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包的,上网上随便下载一个就行