Android Volly简单再封装

来源:互联网 发布:freescale单片机 编辑:程序博客网 时间:2024/05/21 09:47

今天要写的是 对Volly的简单封装,只是拿来练手……

关于Volly的用法这里就不细说了,这篇写得比较详细http://blog.csdn.net/guolin_blog/article/details/17482095,这里只是对StringRequest做了简单封装。

1.首先创建VollyRequestManager管理类

<pre name="code" class="java">/** * VollyRequestManager管理类 *  * @author wen * @version 2015年1月14日 * @see VollyRequestManager * @since */public class VollyRequestManager {private String TAG = "VollyRequestManager";private volatile static VollyRequestManager instance = null;private RequestQueue mRequestQueue = null;private VollyRequestManager(Context context) {initRequestQueue(context);}/** * 初始化mRequestQueue */public void initRequestQueue(Context context) {this.mRequestQueue = Volley.newRequestQueue(context);}public static VollyRequestManager getInstance(Context context) {if (null == instance) {synchronized (VollyRequestManager.class) {if (null == instance) {instance = new VollyRequestManager(context);}}}return instance;}public RequestQueue getRequestQueue() {return this.mRequestQueue;}/** * doGet() */private void doGet(String url, final Map<String, String> headers,final Map<String, String> params,Response.Listener<String> successListener,Response.ErrorListener errorListener) throws Exception {String requestUrl = null;// 如果是GET请求,则请求参数在URL中if (params != null && !params.isEmpty()) {String param = urlEncode(params);requestUrl = url + "?" + param;} else {requestUrl = url;}L.i(TAG, requestUrl);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;}};mRequestQueue.add(stringRequest);}/** * doPost() */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();}}};mRequestQueue.add(stringRequest);}/** * doPut() */private void doPut(String url, final Map<String, String> headers,final Map<String, String> params,Response.Listener<String> successListener,Response.ErrorListener errorListener) throws Exception {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;}};mRequestQueue.add(stringRequest);}/** * doDelete() */private void doDelete() {// .......}public void request(VollyBean vollyBean,Response.Listener<String> successListener,Response.ErrorListener errorListener) throws Exception {if (NetUtils.netIsAvailable()) {switch (vollyBean.getMethod()) {case Constant.GET:doGet(vollyBean.getUrl(), vollyBean.getHeaders(),vollyBean.getParams(), successListener, errorListener);break;case Constant.POST:doPost(vollyBean.getUrl(), vollyBean.getHeaders(),vollyBean.getParams(), successListener, errorListener);break;case Constant.PUT:doPut(vollyBean.getUrl(), vollyBean.getHeaders(),vollyBean.getParams(), successListener, errorListener);break;case Constant.DELETE:doDelete();break;default:break;}}}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();}}

说明:代码很简单,这里不多做说明。

2.创建VollyRequestParam类

</pre><pre name="code" class="java">public class VollyRequestParam {private static String TAG = "VollyRequestParam";/** *  * Description: 在这里接受接受Activity页面传递的参数,这里的<span style="font-family: Arial, Helvetica, sans-serif;">setLoginParam() 只是一个例子</span> */public static Map<String, String> setLoginParam(String name, String pwd) {Map<String, String> params = new HashMap<String, String>();params.put("login_name", name);params.put("password", pwd);return params;}}

3.创建CreateVollyConnetBean类

public class CreateVollyConnetBean {private final static String TAG = "CreateVollyConnetBean";private static CreateVollyConnetBean createVollyCB = new CreateVollyConnetBean();public static VollyBean getLoginCB(Map<String, String> params) {VollyBean vollyBean = new VollyBean();vollyBean.setMethod(Constant.POST);// 设置请求方式vollyBean.setUrl("your URL"); // 设置请求地址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;}}

 VollyBean.java

public class VollyBean {int method;String url;Map<String, String> headers;Map<String, String> params;public VollyBean() {super();// TODO Auto-generated constructor stub}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;}public int getMethod() {return method;}public void setMethod(int method) {this.method = method;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public Map<String, String> getHeaders() {return headers;}public void setHeaders(Map<String, String> headers) {this.headers = headers;}public Map<String, String> getParams() {return params;}public void setParams(Map<String, String> params) {this.params = params;}}

4.最后,只需要在你需要的地方写这么几行代码就OK了

Map<String, String> loginParaMap = VollyRequestParam.setLoginParam("username", "pwd");VollyRequestManager.getInstance(getApplicationContext()).request(CreateVollyConnetBean.getLoginCB(loginParaMap),new Response.Listener<String>() {@Overridepublic void onResponse(String response) {L.i(TAG, response);}}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError error) {L.i(TAG,  error.getMessage());}});
 
   总结:以上代码只是对把我们在项目过程中的UI,数据,网络请求等做了简单的封层,方面敲代码而已。
   另外,上面用到的工具会统一贴出来。
0 0