在安卓中有很多种解析方式。按照大方向有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解析相关推荐

  1. Android 相机教程,Android 相机教程

    Android相机教程 相机主要用于捕获图片和视频.我们可以通过使用相机API的方法来控制相机. Android通过以下两种方式提供了在相机上工作的功能: 通过相机意图 通过相机API 了解相机意图和 ...

  2. 视频教程-仿淘宝客户端电商平台android初级速成-Android

    仿淘宝客户端电商平台android初级速成 北风网技术总监,在某大型电信设备公司担任架构师,主要从事电信领域的软件开发,经验丰富.对电信计费系统以及核心网软件系统有深入了解,对设计高可靠性,高扩展性的 ...

  3. Android精通教程-Android入门简介

    前言 大家好,我是 Vic,今天给大家带来Android精通教程-Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease ...

  4. Android初级教程:RatingBar的使用

    记得淘宝里面买家给卖家评分的时候会有一个星星状的评分条,其实就是基于RatingBar做了自定义使用了.那么本篇文章就对RatingBar的使用做一个基本的认识. 接下来就是正题,那就是对于Ratin ...

  5. Android初级教程Activity小案例(计算器乘法运算)

    首先设置两个布局文件,一个布局文件进行输入数据,获取加法运算:另一个布局文件进行显示最终结果.Activity1启动Activity2,并传递计算结果值给Activity2. main.xml: &l ...

  6. Android初级教程初谈自定义view自定义属性

    有些时候,自己要在布局文件中重复书写大量的代码来定义一个布局.这是最基本的使用,当然要掌握:但是有些场景都去对应的布局里面写对应的属性,就显得很无力.会发现,系统自带的控件无法满足我们的要求,这个时候 ...

  7. android fragment 教程,Android app开发中的Fragment入门学习教程

    在Android3.0上开始引入了一个新概念叫Fragment.它有自己的布局文件,可以作为组件排布,也可以相互组合去实现不同的布局显示.使用Fragment可以重复利用代码,并且可以满足不同设备尺寸 ...

  8. android json教程,Android之JSON解析

    编写项目,包含一个Activity.Activity页面效果如下图所示.点击按钮"解析文件1"后解析Json文件json_single并将结果显示在红色框体中,点击按钮" ...

  9. Android初级教程三个Dialog对话框小案例

    这里把三个对话框形式写在一个项目程序里面,用三个按钮控制显示什么样式的对话框. 先看布局文件代码: <LinearLayout xmlns:android="http://schema ...

最新文章

  1. 详细分析本机号码一键登录原理
  2. mysql memcached plugin插件
  3. JAVA自动补全插件
  4. nginx在linux上安装,Nginx在linux上安装步骤
  5. 【JavaSE02】Java基本语法-概念
  6. redux-form(V7.4.2)笔记(二)
  7. 第九章 图形用户界面的并行化(待续)
  8. 2017.3.29 越狱 思考记录
  9. 自定义git忽略规则
  10. Centos 6.5安装python3.5.1
  11. 118 Python程序中的线程操作-守护线程
  12. 计算机网络连接图标 红叉,win7系统网络连接成功但图标显示红叉的解决方法
  13. SHELL脚本学习指南--学习心得20110924
  14. php微信页面缓存数据,微信页面入口文件被缓存解决方案
  15. 同济大学高等数学第7版视频
  16. Navicat15安装教程超详细步骤
  17. sumif单列求和_Sumif、Sumifs单列多条件求和
  18. springboot接口签名统一效验_Spring Boot 优雅地实现接口参数校验
  19. 数据血缘关系图 工具_面向数据字段的血缘关系
  20. 几种 Proximity Graphs 的单调性分析

热门文章

  1. 代码能不能不要写得这么烂?!
  2. (3)[wp7数据存储] WP7 IsolatedStorage系列篇——通过XmlSerializer读写XML文件 [复制链接]...
  3. Javascript中的翻转器
  4. java并发synchronized 锁的膨胀过程(锁的升级过程)深入剖析(1)
  5. Windows+VS2013爆详细Caffe编译安装教程
  6. C#高级应用之CodeDomProvider引擎篇 .
  7. BZOJ3387栅栏行动
  8. LNMP里常见的502问题
  9. Objective-C马路成魔【14-关键C语言功能】
  10. 转载:ASP.NET在后台代码实现个功能,根据选择提示用户是否继续执行操作