Google Volley使用之自定义
来源:互联网 发布:微信生成器软件 编辑:程序博客网 时间:2024/05/23 12:56
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN。因为CSDN也支持MarkDown语法了,牛逼啊!
【工匠若水 http://blog.csdn.net/yanbober】 阅读前一篇《Google Volley使用之基础》 http://blog.csdn.net/yanbober/article/details/45307015
开源项目链接
Volley自定义 Android Developer文档
Volley主页:https://android.googlesource.com/platform/frameworks/volley
Volley仓库:git clone https://android.googlesource.com/platform/frameworks/volley
Volley GitHub Demo:在GitHub主页搜索Volley会有很多,不过建议阅读Android Developer文档。
背景知识
Most requests have ready-to-use implementations in the toolbox; if your response is a string, image, or JSON, you probably won’t need to implement a custom Request.
For cases where you do need to implement a custom request, this is all you need to do:
- Extend the Request class, where represents the type of parsed response the request expects.
So if your parsed response is a string, for example, create your custom request by extending Request[String].
See the Volley toolbox classes StringRequest and ImageRequest for examples of extending Request[T]. - Implement the abstract methods parseNetworkResponse() and deliverResponse(), described in more detail below.
正如官方牛逼的说法一样:
你要是请求的是string, image, or JSON还好办,有现成的,前一篇已经详细说明了。But你要是返回的不是这些呢?那就比较蛋疼,需要自定义。不过好的一点是Volley框架的扩展性非常好。所以如果需要customer的话你需要按照如下处理:
- 继承Request[T]类,[T]就是你的响应数据格式。你可以在写customer的时候参考StringRequest实现。
- 实现parseNetworkResponse() and deliverResponse()两个抽象方法。
在StringRequest中,deliverResponse()方法调用了mListener中的onResponse()方法,并将response内容传入。parseNetworkResponse()方法对服务器响应的数据进行解析,数据是字节的形式放在NetworkResponse的data变量中的,这里将数据取出然后组装成一个String,并传入Response的success()方法中。
开搞一个实现
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)); } }}
这是官方的GSON的反馈解析实现。
public class XMLRequest extends Request<XmlPullParser> { private final Listener<XmlPullParser> listener; public XMLRequest(int method, String url, Listener<XmlPullParser> listener, ErrorListener errorListener) { super(method, url, errorListener); this.listener = listener; } public XMLRequest(String url, Listener<XmlPullParser> listener, ErrorListener errorListener) { this(Method.GET, url, listener, errorListener); } @Override protected Response<XmlPullParser> parseNetworkResponse(NetworkResponse response) { try { String xmlString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser xmlPullParser = factory.newPullParser(); xmlPullParser.setInput(new StringReader(xmlString)); return Response.success(xmlPullParser, HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (XmlPullParserException e) { return Response.error(new ParseError(e)); } } @Override protected void deliverResponse(XmlPullParser response) { listener.onResponse(response); } }
这是一个XmlPullParser反馈解析的实现。
通过如上你会发现Volley框架不愧于是Google大牛搞的,连拓展自定义都这么方便,设计模式运用的出神入化,膜拜。
【工匠若水 http://blog.csdn.net/yanbober】 继续阅读《 Google Volley框架源码走读》 http://blog.csdn.net/yanbober/article/details/45307217
- Google Volley使用之自定义
- Google Volley使用之自定义
- Google Volley使用之基础
- Google Volley使用之基础
- Volley之自定义XMLRequest
- Android Google IO之Volley
- Volley详解之自定义volley请求
- 网络请求框架(二):volley使用之自定义请求
- Android Volley 之自定义Request
- Android Volley 之自定义Request
- Android Volley 之自定义Request
- Android Volley 之自定义Request
- Android Volley 之自定义Request
- Android Volley 之自定义Request
- Android Volley 之自定义Request
- Android Volley 之自定义Request
- Android Volley之自定义request
- Android Volley 之自定义Request
- jtable——options
- Infragistics 14.2 ——Ultragrid
- HTML中使背景图片自适应浏览器大小
- 如何转换PDF文件的方法
- android 开源项目(转)
- Google Volley使用之自定义
- 为什么构造函数不能为虚函数
- Java生成MD5摘要(MD5 SHA-1)
- .net 在byte[]数组中进行Readline
- 重学JAVASE
- JS 控制VIEWPORT属性,在不同终端类型中兼容自适应显示
- Android系统dimension单位详解
- Java 异常处理
- 体绘制(Volume Rendering)概述之2:体数据详解!!!(包括下载网址)