Volly的简单封装

xiaoxiao2021-02-28  103

今天简单说下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) { // 设置头信息 @Override public Map<String, String> getHeaders() throws AuthFailureError { if (headers != null && !headers.isEmpty()) { return headers; } else { return Collections.emptyMap(); } } // 为空时参数params传入null @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) { // 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) { @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; /* * 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<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包的,上网上随便下载一个就行

转载请注明原文地址: https://www.6miu.com/read-97246.html

最新回复(0)