Android网络通信必备神器Volley详解——实现一个自定义的Request(以Gson为例)
来源:互联网 发布:服装电脑制版软件 编辑:程序博客网 时间:2024/06/10 11:40
虽然Volley已经提供了对于String,图片,JSON,Request的解析,但是总会有些数据不属于以上三种的,这时候就需要我们来自己实现的一个Request来解析我们需要的数据。
实现一个自定义的Request很简单:
1. 继承Request<T>,T代表你要解析的类型,比如服务器返回的response是一个String,那么就要继承Request<String>
2. 实现parseNetworkResponse()和deliverResponse()方法。
parseNetworkResponse
@Overrideprotected Response<T> parseNetworkResponse( NetworkResponse response) { try { String json = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success(gson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response)); } // handle errors...}
parseNetworkResponse()的参数NetworkResponse,这个参数中包含了HTTP的状态码,response的header等数据。我们重写这个函数时,返回的Response<T>必须包含你类型化的返回对象,缓存的metadata或者一个error。
Volley是在一个新线程里调用parseNetworkResponse,防止主线程堵塞。
deliverResponse
Volley 在主线程中通过你在parseNetworkResponse()中返回的对象回调你。大多数的Request都会在这个方法触发一个回调接口,例如
protected void deliverResponse(T response) { listener.onResponse(response);
例子:GsonRequest
<span style="font-size:14px;">public class GsonRequest<T> extends Request<T> { private final Gson gson = new Gson(); private final Class<T> clazz; private final Map<String, String> headers; private final Listener<T> listener; /** * Make a GET request and return a parsed object from JSON. * * @param url URL of the request to make * @param clazz Relevant class object, for Gson's reflection * @param headers Map of request headers */ public GsonRequest(String url, Class<T> clazz, Map<String, String> headers, Listener<T> listener, ErrorListener errorListener) { super(Method.GET, url, errorListener); this.clazz = clazz; this.headers = headers; this.listener = listener; } @Override public Map<String, String> getHeaders() throws AuthFailureError { return headers != null ? headers : super.getHeaders(); } @Override protected void deliverResponse(T response) { listener.onResponse(response); } @Override protected Response<T> parseNetworkResponse(NetworkResponse response) { try { String json = new String( response.data, HttpHeaderParser.parseCharset(response.headers)); 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)); } }}</span>
1 0
- Android网络通信必备神器Volley详解——实现一个自定义的Request(以Gson为例)
- Android网络通信必备神器Volley详解——发送一个标准的Request
- Android网络通信必备神器Volley详解——自定义RequestQueue
- Android网络通信必备神器Volley详解——初识Volley
- Android网络通信框架Volley——自定义Request(Get、Post、文件上传)
- Android-Volley网络通信框架(自定义Request 请求:实现 GsonRequest)
- Android Volley详解(三) 自定义Request
- Android HTTP网络通信(三):Volley框架——定制Request
- 一起来开发Android的天气软件(三)——使用Volley实现网络通信
- Volley实现自定义的网络请求Implementing a Custom Request
- Volley自定义一个Request
- Android网络框架-Volley(五) 使用Volley发送自定义Request
- volley(2)——自定义request
- Android网络通信:通过volley和gson获取聚合数据
- Android 网络通信——Volley
- Android中Volley的Request的自定义
- Android网络通信框架Volley详解
- Android-网络通信框架Volley使用详解
- CodeForces 111B Petya and Divisors
- [HNOI2002]营业额统计(Splay tree 入门)
- 关于AsyncTask应该掌握的一切
- TCP长连接与短连接的区别
- 003-模型和角色动画的输出设置 srt字幕文件
- Android网络通信必备神器Volley详解——实现一个自定义的Request(以Gson为例)
- tar 命令
- java.awt.EventQueue.invokeLater(new Runnable(){public void run(){}})(二)
- 004-模型和角色动画的输出设置(下) srt字幕文件
- BestCoder Round #58 (div.2) HDOJ5494 5495 5496 5497题解
- Douglas Crockford 大神写的 JavaScript 异步控制库:RQ(下)
- Sort Three Distinct Keys
- Using DOM parsing XML document
- 体悟小节