用AsyncHttpClient访问xml页面
来源:互联网 发布:网络技术开发经营范围 编辑:程序博客网 时间:2024/05/22 02:06
使用开源框库AsyncHttpClient
1、在app的build.gradle中的dependencies中添加:
compile 'net.callumtaylor:asynchttpclient:1.5'
2、如果出现错误的话,有几种情况,一种是
这种情况,在app的build.gradle中添加:
packagingOptions { exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' }
如果是
这种属于本机没有安装sdk 19,去sdk Manager去下载
3、AsyncHttpClient本身有访问图片、json等的封装好的方法,访问xml页面的话等同于访问一个文本界面,使用StringResponseHandler
,getContent()
返回的就是这个xml文本
访问及xml解析
访问一个天气预报的界面,Log打印相关信息
北京天气预报
public class MainActivity extends AppCompatActivity { private String response; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); AsyncHttpClient asyncHttpClient = new AsyncHttpClient("http://wthrcdn.etouch.cn/WeatherApi?citykey=101010100"); asyncHttpClient.get(new StringResponseHandler() { @Override public void onSuccess() { response = getContent(); } }); findViewById(R.id.btnPull).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { parseXmlWithPull(response); } }); findViewById(R.id.btnSAX).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { parseXmlWithSAX(response); } }); } /** * pull解析 * @param response */ private void parseXmlWithPull(String response) { try { XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance(); XmlPullParser xmlPullParser = xmlPullParserFactory.newPullParser(); xmlPullParser.setInput(new StringReader(response)); int eventType = xmlPullParser.getEventType(); String date = ""; String high = ""; String low = ""; String type = ""; String fengxiang = ""; String fengli = ""; while (eventType != XmlPullParser.END_DOCUMENT) { String nodeName = xmlPullParser.getName(); switch (eventType) { case XmlPullParser.START_TAG: if ("date".equals(nodeName)) { date = xmlPullParser.nextText(); } if ("high".equals(nodeName)) { high = xmlPullParser.nextText(); } if ("low".equals(nodeName)) { low = xmlPullParser.nextText(); } if ("type".equals(nodeName)) { type = xmlPullParser.nextText(); } if ("fengxiang".equals(nodeName)) { fengxiang = xmlPullParser.nextText(); } if ("fengli".equals(nodeName)) { fengli = xmlPullParser.nextText(); } break; case XmlPullParser.END_TAG: if ("weather".equals(nodeName)) { Log.d("jackie", "date:----------------" + date); Log.d("jackie", "high:----------------" + high); Log.d("jackie", "low:-----------------" + low); Log.d("jackie", "type:-----------------" + type); Log.d("jackie", "fengxiang:-----------------" + fengxiang); Log.d("jackie", "fengli:-----------------" + fengli); } break; default: break; } eventType = xmlPullParser.next(); } } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * SAX解析,需要用到自定义的WeatherHandler * @param response */ private void parseXmlWithSAX(String response) { SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); try { XMLReader xmlReader = saxParserFactory.newSAXParser().getXMLReader(); WeatherHandler weatherHandler = new WeatherHandler(); xmlReader.setContentHandler(weatherHandler); xmlReader.parse(new InputSource(new StringReader(response))); } catch (SAXException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
/** * Created by Law on 2015/11/27. */public class WeatherHandler extends DefaultHandler { private String nodeName; private StringBuilder date; private StringBuilder high; private StringBuilder low; private StringBuilder type; private StringBuilder fengxiang; private StringBuilder fengli; @Override public void startDocument() throws SAXException { date = new StringBuilder(); high = new StringBuilder(); low = new StringBuilder(); type = new StringBuilder(); fengxiang = new StringBuilder(); fengli = new StringBuilder(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { nodeName = localName; } @Override public void characters(char[] ch, int start, int length) throws SAXException { if (nodeName.equals("date")) { date.append(ch, start, length); } if (nodeName.equals("high")) { high.append(ch, start, length); } if (nodeName.equals("low")) { low.append(ch, start, length); } if (nodeName.equals("type")) { type.append(ch, start, length); } if (nodeName.equals("fengxiang")) { fengxiang.append(ch, start, length); } if (nodeName.equals("fengli")) { fengli.append(ch, start, length); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if ("weather".equals(localName)) { Log.d("jackie", "date:----------------" + date.toString().trim()); Log.d("jackie", "high:----------------" + high.toString().trim()); Log.d("jackie", "low:-----------------" + low.toString().trim()); Log.d("jackie", "type:-----------------" + type.toString().trim()); Log.d("jackie", "fengxiang:-----------------" + fengxiang.toString().trim()); Log.d("jackie", "fengli:-----------------" + fengli.toString().trim()); //最后清空StringBuilder date.setLength(0); high.setLength(0); low.setLength(0); type.setLength(0); fengxiang.setLength(0); fengli.setLength(0); } } @Override public void endDocument() throws SAXException { super.endDocument(); }}
0 0
- 用AsyncHttpClient访问xml页面
- 用AsyncHttpClient访问Json数据
- 网络访问之AsyncHttpClient
- AsyncHttpClient
- AsyncHttpClient
- AsyncHttpClient
- AsyncHttpClient
- AsyncHttpClient
- AsyncHttpClient
- AsyncHttpClient
- AsyncHttpClient
- AsyncHttpClient
- 访问页面返回XML格式的数据
- 访问页面返回XML格式的数据
- android学习——使用开源程序AsyncHttpClient访问网络
- 在JSP页面中访问web.xml中的初始化参数
- 用VC++访问XML文件
- web.xml配置SpringMVC时导致访问的页面资源不存在,跳转页面时出现404
- jquery.rotate.js的应用范例
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- ssh远程执行nohup命令不退出
- RPG Maker MV之起始队伍设置
- 基于dubbo框架下的RPC通讯协议性能测试 (顶)
- 用AsyncHttpClient访问xml页面
- if(NULL != p)和if( p!=NULL )
- 将tomcat映射到不同的域名
- word-wrap、white-space和word break的区别
- 黑马程序员—Java基础—网络编程
- java hdu2087
- Android NDK学习之三、 Android.mk的制作
- tomcat使用memcached完成集群
- 最短路模板