Android 谷歌 开源 通信框架 VOLLEY(四)——定制请求
来源:互联网 发布:java代码打包成jar包 编辑:程序博客网 时间:2024/06/05 02:19
三、定制请求
了解了volley自带的默认功能,觉得很方便吧,其实volley的强大远远不止于此。就像网络上传输的数据通常有两种格式,JSON和XML,那么如果想要请求一条XML格式的数据该怎么办呢?
下面我们就来看下volley怎么处理这种不常见的数据格式。
package com.example.VolleyDemo;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.widget.TextView;import android.widget.Toast;import com.android.volley.*;import com.android.volley.toolbox.HttpHeaderParser;import com.android.volley.toolbox.Volley;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import java.io.IOException;import java.io.StringReader;import java.io.UnsupportedEncodingException;import static com.android.volley.Response.*;public class XmlActivity extends Activity { private TextView mXmlResult; private StringBuffer mBuffer = new StringBuffer(); /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_xml); mXmlResult = (TextView) findViewById(R.id.XmlTxt); } RequestQueue mQueue; @Override protected void onStart() { super.onStart(); /********************4步骤********************/ //1.创建一个RequestQueue对象 mQueue = Volley.newRequestQueue(this); //2.启动RequestQueue mQueue.start(); //3.创建一个XMLRequest XMLRequest xmlRequest = new XMLRequest( "http://flash.weather.com.cn/wmaps/xml/china.xml", new Response.Listener<XmlPullParser>() { @Override public void onResponse(XmlPullParser response) { try { int eventType = response.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_TAG: String nodeName = response.getName(); if ("city".equals(nodeName)) { String pName = response.getAttributeValue(0); Log.d("TAG", "pName is " + pName); mBuffer.append(pName); } break; } eventType = response.next(); } } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } mXmlResult.setText(mBuffer.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", error.getMessage(), error); Toast.makeText(XmlActivity.this, "网络错误", Toast.LENGTH_SHORT).show(); } }); //4.将XmlRequest对象添加到RequestQueue里面 mQueue.add(xmlRequest); /******************************************/ } @Override protected void onDestroy() { super.onDestroy(); if(mQueue!=null){ mQueue.cancelAll(this); } } class XMLRequest extends Request<XmlPullParser> { private final Listener<XmlPullParser> mListener; public XMLRequest(int method, String url, Listener<XmlPullParser> listener, ErrorListener errorListener) { super(method, url, errorListener); mListener = 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) { mListener.onResponse(response); } }}
其实很简单,Volley提供了非常强的扩展机制,使得我们可以很轻松地定制出任意类型的Request。
XMLRequest也是继承自Request类的,只不过这里指定的泛型类是XmlPullParser,说明我们准备使用Pull解析的方式来解析XML。在parseNetworkResponse()方法中,先是将服务器响应的数据解析成一个字符串,然后设置到XmlPullParser对象中,在deliverResponse()方法中则是将XmlPullParser对象进行回调。
XMLRequest的用法和StringRequest几乎是一模一样的,我们先创建出一个XMLRequest的实例,并把服务器接口地址传入,然后在onResponse()方法中解析响应的XML数据,最后将这个XMLRequest添加到RequestQueue当中。
参考:http://blog.csdn.net/guolin_blog/article/details/17612763
0 0
- Android 谷歌 开源 通信框架 VOLLEY(四)——定制请求
- Android HTTP网络通信(三):Volley框架——定制Request
- Android网络通信请求框架——Volley
- Android 谷歌 开源 通信框架 VOLLEY(二)——String/Json处理
- Android 谷歌 开源 通信框架 VOLLEY(三)——图片加载处理
- Android 谷歌 开源 通信框架 VOLLEY(五)——源码架构设计
- Android 谷歌 开源 通信框架 VOLLEY(六)——应用实例
- Android —— 网络请求框架 Volley
- Android 谷歌 开源 通信框架 VOLLEY(一)
- Volley网络请求框架简析——Android网络请求框架(三)
- Android-Volley网络通信框架(自定义Request 请求:实现 GsonRequest)
- Android-Volley网络通信框架(volley 例子:电影列表)
- Android Volley框架定制PostUploadRequest上传文件(图片)
- Android Volley框架定制PostUploadRequest上传文件(图片)
- Volley的框架解读四(请求队列RequestQueue)
- Android网络请求开源框架Volley快速使用指南(2)——异步获取图片
- Android网络通信框架Volley——自定义Request(Get、Post、文件上传)
- Android HTTP网络通信(二):Volley框架——介绍、基本用法
- 南邮 OJ 1288 工作分配问题
- java集合框架(泛型限定)
- 软件项目延期分析
- java synchronized详解
- 9个Web工具提高Android开发效率
- Android 谷歌 开源 通信框架 VOLLEY(四)——定制请求
- 刚接触C++,在此就写一个转化为二进制的小程序
- POJ1664 放苹果儿
- 关于打印质量的心得
- iOS frame\center\bounds属性
- 查询所有本周,本月的数据
- 安装lVS+keepalived心得
- OpenCV参考手册之Mat类详解(二)
- jquery ajax