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;@Overrideprotected 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是一个接口,不可以newXmlPullParser 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的javabeancityList = 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 blocke.printStackTrace();}}}
运行程序,解析结果如下:
转载于:https://www.cnblogs.com/wanghang/p/6299620.html
Android初级教程:Android中解析方式之pull解析相关推荐
- Android 相机教程,Android 相机教程
Android相机教程 相机主要用于捕获图片和视频.我们可以通过使用相机API的方法来控制相机. Android通过以下两种方式提供了在相机上工作的功能: 通过相机意图 通过相机API 了解相机意图和 ...
- 视频教程-仿淘宝客户端电商平台android初级速成-Android
仿淘宝客户端电商平台android初级速成 北风网技术总监,在某大型电信设备公司担任架构师,主要从事电信领域的软件开发,经验丰富.对电信计费系统以及核心网软件系统有深入了解,对设计高可靠性,高扩展性的 ...
- Android精通教程-Android入门简介
前言 大家好,我是 Vic,今天给大家带来Android精通教程-Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease ...
- Android初级教程:RatingBar的使用
记得淘宝里面买家给卖家评分的时候会有一个星星状的评分条,其实就是基于RatingBar做了自定义使用了.那么本篇文章就对RatingBar的使用做一个基本的认识. 接下来就是正题,那就是对于Ratin ...
- Android初级教程Activity小案例(计算器乘法运算)
首先设置两个布局文件,一个布局文件进行输入数据,获取加法运算:另一个布局文件进行显示最终结果.Activity1启动Activity2,并传递计算结果值给Activity2. main.xml: &l ...
- Android初级教程初谈自定义view自定义属性
有些时候,自己要在布局文件中重复书写大量的代码来定义一个布局.这是最基本的使用,当然要掌握:但是有些场景都去对应的布局里面写对应的属性,就显得很无力.会发现,系统自带的控件无法满足我们的要求,这个时候 ...
- android fragment 教程,Android app开发中的Fragment入门学习教程
在Android3.0上开始引入了一个新概念叫Fragment.它有自己的布局文件,可以作为组件排布,也可以相互组合去实现不同的布局显示.使用Fragment可以重复利用代码,并且可以满足不同设备尺寸 ...
- android json教程,Android之JSON解析
编写项目,包含一个Activity.Activity页面效果如下图所示.点击按钮"解析文件1"后解析Json文件json_single并将结果显示在红色框体中,点击按钮" ...
- Android初级教程三个Dialog对话框小案例
这里把三个对话框形式写在一个项目程序里面,用三个按钮控制显示什么样式的对话框. 先看布局文件代码: <LinearLayout xmlns:android="http://schema ...
最新文章
- 详细分析本机号码一键登录原理
- mysql memcached plugin插件
- JAVA自动补全插件
- nginx在linux上安装,Nginx在linux上安装步骤
- 【JavaSE02】Java基本语法-概念
- redux-form(V7.4.2)笔记(二)
- 第九章 图形用户界面的并行化(待续)
- 2017.3.29 越狱 思考记录
- 自定义git忽略规则
- Centos 6.5安装python3.5.1
- 118 Python程序中的线程操作-守护线程
- 计算机网络连接图标 红叉,win7系统网络连接成功但图标显示红叉的解决方法
- SHELL脚本学习指南--学习心得20110924
- php微信页面缓存数据,微信页面入口文件被缓存解决方案
- 同济大学高等数学第7版视频
- Navicat15安装教程超详细步骤
- sumif单列求和_Sumif、Sumifs单列多条件求和
- springboot接口签名统一效验_Spring Boot 优雅地实现接口参数校验
- 数据血缘关系图 工具_面向数据字段的血缘关系
- 几种 Proximity Graphs 的单调性分析
热门文章
- 代码能不能不要写得这么烂?!
- (3)[wp7数据存储] WP7 IsolatedStorage系列篇——通过XmlSerializer读写XML文件 [复制链接]...
- Javascript中的翻转器
- java并发synchronized 锁的膨胀过程(锁的升级过程)深入剖析(1)
- Windows+VS2013爆详细Caffe编译安装教程
- C#高级应用之CodeDomProvider引擎篇 .
- BZOJ3387栅栏行动
- LNMP里常见的502问题
- Objective-C马路成魔【14-关键C语言功能】
- 转载:ASP.NET在后台代码实现个功能,根据选择提示用户是否继续执行操作