Volley请求封装
来源:互联网 发布:社交网络的发展现状 编辑:程序博客网 时间:2024/06/17 12:40
1.封装GsonRequest
package com.inspur.handnwom.content.reportdeal.utils;import android.util.Log;import com.android.volley.NetworkResponse;import com.android.volley.ParseError;import com.android.volley.Request;import com.android.volley.Response;import com.android.volley.Response.ErrorListener;import com.android.volley.Response.Listener;import com.android.volley.toolbox.HttpHeaderParser;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import java.io.UnsupportedEncodingException;/** * <pre> * author: wsj * time : 2017/06/27 20:29 * desc : * </pre> */public class GsonRequest<T> extends Request<T> { private final Listener<T> mListener; private static Gson mGson = new Gson(); private String url; private Class<T> mClass; private TypeToken<T> mTypeToken; public GsonRequest(int method, String url, Class<T> clazz, Listener<T> listener, ErrorListener errorListener) { super(method, url, errorListener); mClass = clazz; this.url = url; mListener = listener; } public GsonRequest(int method, String url, TypeToken<T> typeToken, Listener<T> listener, ErrorListener errorListener) { super(method, url, errorListener); this.url = url; mTypeToken = typeToken; mListener = listener; } public GsonRequest(String url, Class<T> clazz, Listener<T> listener, ErrorListener errorListener) { this(Method.GET, url, clazz, listener, errorListener); this.url = url; } public GsonRequest(String url, TypeToken<T> typeToken, Listener<T> listener, ErrorListener errorListener) { super(Method.GET, url, errorListener); this.url = url; mTypeToken = typeToken; mListener = listener; } @Override protected Response<T> parseNetworkResponse(NetworkResponse response) { String jsonString = ""; try { jsonString = new String(response.data, "UTF-8"); if (mTypeToken == null) return Response.success(mGson.fromJson(jsonString, mClass), HttpHeaderParser.parseCacheHeaders(response)); else return (Response<T>) Response.success(mGson.fromJson(jsonString, mTypeToken.getType()), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { Log.d("service", "服务器回复数据" + jsonString); Log.d("service", "要解析的url" + url); Log.d("service", "要解析的class" + mClass.getName()); Log.d("service", "报错信息" + e.getMessage()); return Response.error(new ParseError(e)); } } @Override protected void deliverResponse(T response) { mListener.onResponse(response); }}
2.封装VolleyRequest
package com.inspur.handnwom.content.reportdeal.utils;import android.content.Context;import android.util.Log;import com.android.volley.AuthFailureError;import com.android.volley.DefaultRetryPolicy;import com.android.volley.RequestQueue;import com.android.volley.Response;import com.android.volley.toolbox.Volley;import java.util.HashMap;import java.util.Map;/** * <pre> * author: wsj * time : 2017/06/27 20:28 * desc : * </pre> */public class VolleyRequest { private static RequestQueue mRequestQueue; private Map<String,String> mMap=new HashMap<>(); private String cookie=""; private VolleyRequest() { } private VolleyRequest(Map<String,String> mMap) { this.mMap=mMap; } private VolleyRequest(Map<String,String> mMap,String cookie) { this.mMap=mMap; this.cookie=cookie; } /** * @param context ApplicationContext */ public static void buildRequestQueue(Context context) { mRequestQueue = Volley.newRequestQueue(context); //... do something } /** (WangShuJie)增加代码 usage:非带参数*/ public static VolleyRequest newInstance() { if (mRequestQueue == null) { throw new NullPointerException("Call buildRequestQueue method first."); } //... return new VolleyRequest(); } /** (WangShuJie)增加代码 usage:带参数*/ public static VolleyRequest newInstance(Map<String,String> mMap) { if (mRequestQueue == null) {// throw new NullPointerException("Call buildRequestQueue method first."); } //... Log.i("mtag","newInstance==========="+mMap.get("goodsname")); return new VolleyRequest(mMap); } /** (WangShuJie)增加代码 usage:带参数*/ public static VolleyRequest newInstance(Map<String,String> mMap,String cookie) { if (mRequestQueue == null) {// throw new NullPointerException("Call buildRequestQueue method first."); } //... Log.i("mtag","newInstance==========="+mMap.get("goodsname")); return new VolleyRequest(mMap,cookie); } /** * @param url * @param clazz * @param listener * @param errorListener *带参 * @return */ public <T> GsonRequest<T> newGsonRequest2(int method,String url, Class<T> clazz, Response.Listener<T> listener, Response.ErrorListener errorListener) { GsonRequest<T> request = new GsonRequest(method,url, clazz, listener, errorListener){ @Override protected Map<String, String> getParams() { return mMap; } @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String,String> mMap=new HashMap<String, String>(); mMap.put("Cookie",cookie); return mMap; } }; request.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 0, 1.0f)); mRequestQueue.add(request); return request; } /** (WangShuJie)增加代码 usage:不带参的*/ public <T> GsonRequest<T> newGsonRequest(String url, Class<T> clazz, Response.Listener<T> listener, Response.ErrorListener errorListener) { GsonRequest<T> request = new GsonRequest(url, clazz, listener, errorListener); request.setRetryPolicy(new DefaultRetryPolicy(5 * 1000,0, 1.0f)); mRequestQueue.add(request); return request; }}
3.使用
HashMap<String, String> map = new HashMap<>();VolleyRequest.newInstance(map,cookie).newGsonRequest2(Request.Method.POST, Constant.POST_URL + Constant.ROADNETWORK_APPER, StepModle.class,new Response.Listener<StepModle>() { @Override public void onResponse(StepModle stepModle) { if (stepModle.isSuccess()) { Toast.makeText(abApplication, stepModle.getMessage(), Toast.LENGTH_SHORT).show(); } else { Toast.makeText(abApplication, stepModle.getMessage(), Toast.LENGTH_SHORT).show(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Toast.makeText(abApplication, "访问服务器失败", Toast.LENGTH_SHORT).show(); } });
只需要map(post请求携带的参数,cookie服务器端需要的cookie值,大部分服务器都不需要,传空就好,或者直接调用newInstance(map),已封装好)
newInstance(map,cookie)
如果是不带参(get请求),调用newGsonRequest,post请求如下
newGsonRequest2(Request.Method.POST, Constant.POST_URL + Constant.ROADNETWORK_APPER, StepModle.class,new Response.Listener<StepModle>
如果有什么问题可以留言,一起探讨
阅读全文
1 0
- Volley请求封装
- Volley请求封装
- Volley二次封装,实现网络请求缓存
- volley请求的二次封装---StringRequest
- Volley网络请求的简单封装使用
- 自定义封装Volley的请求集合
- Volley封装的网络请求类
- Volley请求的简单封装,以及applicaation/json数据请求
- 使用Volley框架网络请求Request<T>的封装
- Volley网络请求封装之LruCache源码分析
- 一:网络请求框架封装范例-基于volley
- 将Volley的Get请求封装成一个类
- Volley中的GET和POST请求工具库的封装
- 对Volley简单的封装,让网络请求更简单
- Volley封装
- 根据volley网络请求框架封装好的get请求和post请求
- 封装Volley使Volley的每个请求都自动保存和发送Cookie
- Volley请求
- 高德地图WEB端,在所画的圆(Circle)内显示在圆(Marker)内的点
- Analysis of Algorithm 2: Master theorem & Math induction
- oracle之sqlldr命令数据导入
- java的八种基本数据类型
- java 动态代理
- Volley请求封装
- spring-boot入门学习笔记
- ios打LOG 打出函数调用详细堆栈
- java把大数据类型的包装类
- 移动硬盘数据丢失如何恢复
- POJ3122 Pie(二分)
- 【Unity学习笔记】——基础篇:Camera天空盒
- iOS 地图 自定义以及添加锚点
- windows 下 c++ socket udp 广播