Volley Request的继承与异步映射JSON对象
来源:互联网 发布:淘宝企业店铺注册入口 编辑:程序博客网 时间:2024/05/16 06:48
文章中继承了Volley的 request,并在请求返回的时候在异步的时候就转了JSON对象
代码如下,包含了POST与GET
private static final String PROTOCOL_CONTENT_TYPE = String.format("application/json; charset=%s", "utf-8");private final String requestBody;private final Gson gson = new Gson();private final Class<T> clazz;private final Map<String, String> headers;private final Response.Listener<T> listener;private boolean requestBodyGzipEnable = true;
构造函数
public GsonRequest(String url, Class<T> clazz, Response.Listener<T> listener, Response.ErrorListener errorListener) { this(Method.GET, url, null, clazz, listener, errorListener);}public GsonRequest(int method, String url, String requestBody, Class<T> clazz, Response.Listener<T> listener, Response.ErrorListener errorListener) { this(method, url, null, requestBody, clazz, listener, errorListener);}public GsonRequest(int method, String url, Map<String, String> headers, String requestBody, Class<T> clazz, Response.Listener<T> listener, Response.ErrorListener errorListener) { super(method, url, errorListener); this.clazz = clazz; this.headers = headers; this.listener = listener; this.requestBody = requestBody;}
是否需要GZip压缩(项目中需要,可根据实际情况来添加是否需要) (Gzip这个类就不贴出来了)
public void setRequestBodyGzipEnable(boolean enable){ requestBodyGzipEnable = enable;}
@Overridepublic Map<String, String> getHeaders() throws AuthFailureError { return headers != null ? headers : super.getHeaders();}
@Overrideprotected void deliverResponse(T response) { listener.onResponse(response);}
@Overrideprotected Response<T> parseNetworkResponse(NetworkResponse response) { try { String json = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
//就在这里,返回成功的时候直接转成了JSON对象, return Response.success(gson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JsonSyntaxException e) { return Response.error(new ParseError(e)); }}
@Overridepublic String getBodyContentType() { return PROTOCOL_CONTENT_TYPE;}@Overridepublic byte[] getBody() { try { if(requestBody == null){ return null; } return this.requestBodyGzipEnable ? Gzip.gzip(requestBody) : requestBody.getBytes(); } catch (Exception e) { Logger.e(TAG, e.toString(), e); return null; }}
还有一个Networking的类
public class Networking { private RequestQueue mQueue; private static class SingletonHolder { private static final Networking networking = new Networking(); } protected Networking() { mQueue = Volley.newRequestQueue(AppEnv.getApplicationContext()); } private static RequestQueue getRequestQueue() { return SingletonHolder.networking.mQueue; } public static <T> Request<T> add(Request<T> request) { RetryPolicy retryPolicy = new DefaultRetryPolicy(Configure.TIME_OUT, Configure.RETRY_COUNT, 1); return add(request, retryPolicy); } public static <T> Request<T> add(Request<T> request, @NonNull RetryPolicy retryPolicy) { request.setRetryPolicy(retryPolicy); return getRequestQueue().add(request); } public static void cancelAll(final Object tag) { getRequestQueue().cancelAll(tag); } public static void cancelAll(RequestQueue.RequestFilter filter) { getRequestQueue().cancelAll(filter); }
使用的时候如下
public static void getShippingDetails(final HttpCallback<ShippingDetailResponse> callback){ final String url = UrlConstants.ShippingDetailURL; Logger.d(TAG, "url =" + url); GsonRequest<ShippingDetailResponse> request = new GsonRequest<ShippingDetailResponse>(url, ShippingDetailResponse.class, new Response.Listener<ShippingDetailResponse>() { @Override public void onResponse(ShippingDetailResponse response) { if(callback!=null) callback.onSuccess(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError err) { Logger.e(TAG, "onError: " + url); if (callback != null) { callback.onError(err.toString(), err); } } }); Networking.add(request);}
HttpCallback //是自己写的一个接口
public interface HttpCallback<T> { void onSuccess(T response); void onError(String errMsg, Throwable e);}
使用起来还是蛮方便的 ,POST的就不再贴代码了!,欢迎各位看官指点,多谢!
0 0
- Volley Request的继承与异步映射JSON对象
- Android Volley自定义Request(JSON)
- LitJSON之JSON与对象间的相互映射
- json与gson,volley
- 继承Volley的Request<T>,创造自己的Request,实现cookie回调和指定返回数据类型回调
- Volley定制自己的Request
- 组件映射与继承映射
- Volley的应用(通过Json与服务器交互)
- 【网络通信:Volley】请求的发送与响应之JSON
- 模块化C代码与UML对象模型之间的映射(2)——抽象类与继承
- 模块化C代码与UML对象模型之间的映射(2)——抽象类与继承
- jQuery 的异步方法与JSON
- 从request对象中获取请求json格式的参数
- Hibernate对象关系映射----继承映射
- request对象getParameterValues与getParameter的区别
- request对象getParameter()与getAttribute() 的区别
- Servlet的request与response对象
- Ext3.4 Ext.Ajax.request 的同步与异步
- 聊聊HTTPS和SSL协议
- 【Arduino】1.5 串口的使用
- YII中遍历数组报错<非法字符串抵消“id”>
- 易懂之并查集
- 最小生成树+树上期望_____Abandoned country(hdu 5723 2016多校第一场)
- Volley Request的继承与异步映射JSON对象
- SG函数找规律练习-HDU3032- Nim or not Nim?
- 常见的几种排序方法
- 前端js文件合并三种方式
- ExtJS :ComboBox控件不能选中问题的 解决方案
- CGMutablePathRef详解
- 使用sqoop将hive数据导入mysql实例
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
- 【HD 1233】还是畅通工程(最小生成树 Kruskal算法模板题)