Android初级教程:Android中解析方式之pull解析
在安卓中有很多种解析方式。按照大方向有xml解析和json解析。而,细致的分,xml和json解析各有自己的很多解析方式。今天这一篇主要介绍xml解析中的pull解析。对于xml的解析方式,我之前在javaweb一些知识中有写过dom和dom4j等等解析方式。有兴趣的读者可以去javaweb篇里面找相关的内容。
先自定义一个数据源,假设就是访问服务器返回的xml数据文件名称为weather.xml:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<weather>
<city>
<name>北京</name>
<temp>5°</temp>
<pm>80</pm>
</city>
<city>
<name>西安</name>
<temp>-5°</temp>
<pm>800</pm>
</city>
<city>
<name>南京</name>
<temp>12°</temp>
<pm>60</pm>
</city>
</weather>
针对此,建立一个javabean,以稍后保存上边的数据。每一个city就代表一个对象。这样更符合面向对象的思想
在mainactivity中代码完成解析过程:
package com.itydl.pullparser; import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException; import com.itheima.pullparser.domain.City; import android.os.Bundle;
import android.app.Activity;
import android.util.Xml;
import android.view.Menu;
import android.view.View; //服务器向客户端传送数据。这些数据一般保存在xml文件中的。因此需要对数据进行解析、
public class MainActivity extends Activity { List<City> cityList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} public void click(View v){
//获取到src文件夹下的资源文件ClassLoader.getResourceAsStream.返回的是InputStream类型的。
InputStream is = getClassLoader().getResourceAsStream("weather.xml"); //拿到pull解析器对象XmlPullParser是一个接口,不可以new
XmlPullParser xp = Xml.newPullParser();
//初始化
try {
xp.setInput(is, "utf-8");//初始化,设置文件的位置流对象(解析目标文件对象)和解析编码格式 //获取当前节点的事件类型,因为pull解析是从xml文件第一行头节点往下解析的,“指针”往下移动,标签(节点)不同,事件类型就不同。
//通过事件类型的判断,我们可以知道当前节点是什么节点,从而确定我们应该做什么操作
int type = xp.getEventType();
City city = null;
while(type != XmlPullParser.END_DOCUMENT){//xp.END_DOCUMENT
//根据节点的类型,要做不同的操作
switch (type) {
case XmlPullParser.START_TAG:
// 获取当前节点的名字
if("weather".equals(xp.getName())){
//创建city集合对象,用于存放city的javabean
cityList = new ArrayList<City>();
}
else if("city".equals(xp.getName())){
//创建city的javabean对象
city = new City();
}
else if("name".equals(xp.getName())){
// 获取当前节点的下一个节点的[文本]
String name = xp.nextText();
city.setName(name);
}
else if("temp".equals(xp.getName())){
// 获取当前节点的下一个节点的文本
String temp = xp.nextText();
city.setTemp(temp);
}
else if("pm".equals(xp.getName())){
// 获取当前节点的下一个节点的文本
String pm = xp.nextText();
city.setPm(pm);
}
break;
case XmlPullParser.END_TAG:
if("city".equals(xp.getName())){
//把city的javabean放入集合中。三个城市city,解析完一个城市就把那个城市实例放到集合里面去。
cityList.add(city);
}
break; } //把指针移动到下一个节点,并返回该节点的事件类型
type = xp.next();
} for (City c : cityList) {
System.out.println(c.toString());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
运行程序,解析结果如下:
Android初级教程:Android中解析方式之pull解析的更多相关文章
- Android精通教程-Android入门简介
		
前言 大家好,我是 Vic,今天给大家带来Android精通教程-Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease ...
 - Android初级教程理论知识(第三章测试&数据存储&界面展现)
		
首先介绍单元测试,我在javaweb部分有详细介绍单元测试框架的一篇文章. 可以先看在javaweb中的单元测试详解篇http://blog.csdn.net/qq_32059827/article/ ...
 - Android初级教程:RatingBar的使用
		
记得淘宝里面买家给卖家评分的时候会有一个星星状的评分条,其实就是基于RatingBar做了自定义使用了.那么本篇文章就对RatingBar的使用做一个基本的认识. 接下来就是正题,那就是对于Ratin ...
 - Android初级教程:ViewPage使用详解
		
转载本博客,请注明出处:http://blog.csdn.net/qq_32059827点击打开链接 ViewPage使用之一就是轮播广告,就以此为出发点,来详细解析一下ViewPage的使用和加载机 ...
 - Android初级教程理论知识(第二章布局&读写文件)
		
常见布局 相对布局 RelativeLayout 组件默认左对齐.顶部对齐 设置组件在指定组件的右边 android:layout_toRightOf="@id/tv1" 设置在指 ...
 - Android初级教程_获取Android控件的宽和高
		
转载:http://blog.csdn.net/johnny901114/article/details/7839512 我们都知道在onCreate()里面获取控件的高度是0,这是为什么呢?我们来看 ...
 - Android初级教程:使用xml序列器
		
之前备份短信的时候生成xml都是手动拼写的,有一个问题:当短信里面存在</body>这样的标签的时候,最后结果就不是完整的xml文件,显然出错.但是,今天使用序列化器的方式,就能有效的解决 ...
 - Android初级教程初谈自定义view自定义属性
		
有些时候,自己要在布局文件中重复书写大量的代码来定义一个布局.这是最基本的使用,当然要掌握:但是有些场景都去对应的布局里面写对应的属性,就显得很无力.会发现,系统自带的控件无法满足我们的要求,这个时候 ...
 - Android初级教程进程间的通信AIDL
		
在介绍跨程序进程间通信AIDL前,先看一下本程序activity与某个服务是怎么绑定在一起进行交互的. 需求:服务有两个方法.分别是播放音乐与停止播放音乐.该程序的活动要访问这两个方法,在activi ...
 
随机推荐
- 【bzoj4009 hnoi2015】接水果
			
题目描述 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果.由于她已经DT FC 了The big black, 她觉得这个游戏太简单了,于是发明了一个更加难的版本. 首先有 ...
 - 5步做一个 TensorFlow 聊天机器人:DeepQA
			
项目截图: 实测截图: 一步一步教程: 1.下载这个项目: https://github.com/Conchylicultor/DeepQA 2.下载训练好的模型: https://drive.goo ...
 - java实现微信支付之扫码支付
			
本文直接从代码调用微信扫码支付讲起.账号配置,参数生成等请参考官方文档:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1 微信 ...
 - 浅谈Log4net在项目中如何记录日志
			
一 引入背景 在软件开发周期中,无论是开发中,或是测试中,或是上线后,选择合适的工具监控程序的运行状态至关重要,只有如此,才能更好地排查程序问题和检测程序性能问题等.本篇文章主要与大家分享,如何 ...
 - IOI2016Day2. Messy
			
题目链接:http://uoj.ac/problem/239 题目大意: 这是一道交互题,交互库维护了一个数据结构,可以存储n为二进制串,一开始你可以向空的数据结构中插入若干二进制串, 接下来这个数据 ...
 - 【DotNet加密方式解析】-- 好文收藏
			
By -- 彭泽 一. DotNet加密方式解析--散列加密 笔记: 散列加密种类: 1.MD5 128位 2.SHA-1 160位 3.SHA-256 256位 4.SHA-384 384位 ...
 - AIX 命令
			
1,[ctrl]+h 删除命令 2, set -o emacs后: [ctrl]+p 看上条命令 [ctrl]+n 看下条命令 两次[esc] 自动补全 3, set -o vi 后,可以按照vi编辑 ...
 - Django中过期@cache_page中缓存的views数据
			
django的缓存系统中,cache_page 这个装饰器非常好用,只要添加一个装饰器就可以缓存views的响应内容,但是django没有提供过期这个views缓存数据的功能. @cache_page ...
 - 安卓高级3 RecyclerView结合SwipeRefreshLayout并添加上拉
			
目录结构: 效果图: MainActivity.java package qianfeng.com.pullrecyclerviewdemo; import android.os.Bundle; im ...
 - 计算机网络之文件传送协议FTP
			
FTP 文件传送协议FTP(File Transfer Protocol)是因特网上使用最广泛的文件传送协议. FTP 提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限.FTP ...