首先要说的就是VollyBean,都是get,set没啥解释的
import java.util.Map;
/**
* @author penguinfool
* Volly通信请求类
*/
public class VollyBean {
int method;
String url;
Map headers;
Map params;
/**
* 构造函数
*/
public VollyBean() {
super();
}
/**
* @param method 请求类型
* @param url 请求地址
* @param headers 请求头
* @param params 请求参数
*/
public VollyBean(int method, String url, Map headers,
Map 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 getHeaders() {
return headers;
}
/**
* @param headers 请求头
*/
public void setHeaders(Map headers) {
this.headers = headers;
}
/**
* @return 请求参数
*/
public Map getParams() {
return params;
}
/**
* @param params 请求参数
*/
public void setParams(Map params) {
this.params = params;
}
}
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 headers,
final Map params,
Response.Listener 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) {
// 设置头信息
@Override
public Map getHeaders() throws AuthFailureError {
if (headers != null && !headers.isEmpty()) {
return headers;
} else {
return Collections.emptyMap();
}
}
// 为空时参数params传入null
@Override
protected Map 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 headers,
final Map params,
Response.Listener successListener,
Response.ErrorListener errorListener) {
// L.i(TAG + "doPost", url);
// for (Map.Entry entry :headers.entrySet()) {
// System.out.println("hkey= " + entry.getKey() + " and hvalue= " +
// entry.getValue());
// }
//
//
// for (Map.Entry entry :params.entrySet()) {
// System.out.println("pkey= " + entry.getKey() + " and pvalue= " +
// entry.getValue());
// }
StringRequest stringRequest = new StringRequest(Method.POST, url,
successListener, errorListener) {
@Override
protected Map getParams() throws AuthFailureError {
return params;
}
@Override
public Map 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 headers,
final Map params,
Response.Listener 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) {
// 设置头信息
@Override
public Map getHeaders() throws AuthFailureError {
if (headers != null && !headers.isEmpty()) {
return headers;
} else {
return Collections.emptyMap();
}
}
@Override
protected Map 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 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 params)
throws UnsupportedEncodingException {
Iterator 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 params = new HashMap();
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 header = new HashMap();
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);
}