在Android中,常见的XML解析器分别为SAX解析器、DOM解析器和PULL解析器,其中PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部在解析各种XML时也是用PULL解析器,今天我来介绍一下PULL解析器

首先是在Tomcat服务器上建了一个xml的文档具体如下:

通过访问网络与服务器的交互。

下面是具体的代码:

 package com.hb.xml;

 import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL; import org.xmlpull.v1.XmlPullParser; import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Xml;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity {
protected static final int NUMBER = 0;
protected static final int LOCATION = 1;
protected static final int PHONEJX = 2;
protected static final int NO = 3;
private Button bt_start;
private TextView tv_desc;
private TextView tv_number;
private TextView tv_for;
private String path;
private XmlPullParser xml;
private Handler handler=new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case NUMBER:
tv_number.setText((String)msg.obj);
Toast.makeText(MainActivity.this, "测试成功", 0).show();
break;
case LOCATION:
tv_for.setText((String)msg.obj);
Toast.makeText(MainActivity.this, "测试成功", 0).show();
break;
case PHONEJX:
tv_desc.setText((String)msg.obj);
Toast.makeText(MainActivity.this, "测试成功", 0).show();
break;
case NO:
Toast.makeText(MainActivity.this, "测试失败", 0).show();
break;
}
};
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
} private void initView() {
bt_start=(Button) findViewById(R.id.bt_start);
tv_desc=(TextView) findViewById(R.id.tv_desc);
tv_number=(TextView) findViewById(R.id.tv_number);
tv_for=(TextView) findViewById(R.id.tv_for);
}
public void testtesting(View v){
new Thread(){ public void run() {
try {
URL url = new URL("http://192.168.1.104:8080/test.xml");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(3000);
conn.setRequestMethod("GET");
int code = conn.getResponseCode();
if(code==200){ InputStream is = conn.getInputStream();
xml = Xml.newPullParser();
xml.setInput(is, "gbk");
int type = xml.getEventType();
while (type!=XmlPullParser.END_DOCUMENT) {
if(type == XmlPullParser.START_TAG){
if("phonenum".equals(xml.getName())){
String phonenum=xml.nextText();
Message msg= new Message();
msg.what=NUMBER;
msg.obj=phonenum;
handler.sendMessage(msg);
}else if("location".equals(xml.getName())){
String location=xml.nextText();
Message msg= new Message();
msg.what=LOCATION;
msg.obj=location;
handler.sendMessage(msg);
}else if("phoneJx".equals(xml.getName())){
String desc=xml.nextText();
Message msg= new Message();
msg.what=PHONEJX;
msg.obj=desc;
handler.sendMessage(msg);
}
}else{
//测试失败
}
type=xml.next();
}
}
} catch (Exception e) {
e.printStackTrace();
Message msg= new Message();
msg.what=NO;
handler.sendMessage(msg);
}
};
}.start();
}
}

最后别忘记添加访问网络的权限:

<uses-permission android:name="android.permission.INTERNET"/>

简单的布局:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" > <Button
android:id="@+id/bt_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:onClick="testtesting"
android:text="测试" /> <TextView
android:id="@+id/tv_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="内容"
android:textColor="#F4A460" /> <TextView
android:id="@+id/tv_for"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="信息"
android:textColor="#99FF33" />
<TextView
android:id="@+id/tv_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="描述"
android:textColor="#EE30A7" /> </LinearLayout>

源码下载地址:http://pan.baidu.com/s/1geBFWLd

Android 解析XML—pull解析方式的更多相关文章

  1. android解析xml文件的方式

    android解析xml文件的方式   作者:东子哥 ,发布于2012-11-26,来源:博客园   在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xm ...

  2. Xml解析之PULL解析 例1

    <?xml version="1.0" encoding="UTF-8"?> <persons> <person id=" ...

  3. JAVA解析XML之SAX方式

    JAVA解析XML之SAX方式 SAX解析xml步骤 通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory 通过SAXParse ...

  4. JAVA解析XML之DOM方式

    JAVA解析XML之DOM方式 准备工作 创建DocumentBuilderFactory对象;    创建DocumentBuilder对象; 通过DocumentBuilder对象的parse方法 ...

  5. Java解析XML文件的方式

    在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求.一般来讲,有基于DOM树和SAX的两种解析xml文件的方式 ...

  6. Android:XML简介 & 解析方式对比(DOM、SAX、PULL)

    目录   示意图 1. 定义 XML,即 extensible Markup Language ,是一种数据标记语言 & 传输格式 2. 作用 对数据进行标记(结构化数据).存储 & ...

  7. Android 下用 Pull 解析和生成 XML

    Java 中是可以用 SAX 和 DOM 解析 XML  的,虽然在 Android 下也可以用这2中方式,但是还是推荐用 Pull.Pull 使用简单,效率相对高,Android 下是集成了 Pul ...

  8. android解析xml (pull)

    1. xml <persons> <person id="18"> <name>furong</name> <age>2 ...

  9. Android 生成和Pull解析xml

    一.单个对象生成xml 生成以下xml,该怎么生成呢? <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <accou ...

随机推荐

  1. 关于Spring的69个问题

    Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring ...

  2. 手撸HashMap实现

    前言 HashMap是Java中常用的集合,而且HashMap的一些思想,对于我们平时解决业务上的一些问题,在思路上有帮助,基于此,本篇博客将分析HashMap底层设计思想,并手写一个迷你版的Hash ...

  3. Switch组件

    Switch组件,业务需求中经常遇到.我司的旧项目中,由于没有使用较为成熟点的组件库.自己实现了一个switch组件,但是实现的略微有些丑陋. 实现基本需求 https://jsfiddle.net/ ...

  4. JavaSE 学习笔记之多线程(十三)

    多线程: 进程:正在进行中的程序.其实进程就是一个应用程序运行时的内存分配空间. 线程:其实就是进程中一个程序执行控制单元,一条执行路径.进程负责的是应用程序的空间的标示.线程负责的是应用程序的执行顺 ...

  5. MINSUB - Largest Submatrix

    MINSUB - Largest Submatrix no tags  You are given an matrix M (consisting of nonnegative integers) a ...

  6. poj 1698

    题意:爱丽丝喜欢拍电影,现在正好有N个公司找她拍电影,每部电影都指定在每周的星期几拍,要用D天拍完电影,最迟M个星期要拍完.问爱丽丝能不能拍完所有电影. 分析:350天各为一个顶点,每个顶点都有且只有 ...

  7. 华为/H3C Syslog配置

    H3C交换机的设置举例1. 组网需求将系统的日志信息发送到 linux 日志主机:日志主机的IP 地址为1.2.0.1/16:信息级别高于等于 informational 的日志信息将会发送到日志主机 ...

  8. hdu_1863_畅通工程_201403122000

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. MySQL的limit用法及优化(转)

    常规用法: 用法一: OFFSET ; 比如这个SQL ,limit后面跟的是2条数据,offset后面是从第1条开始读取. 用法二: ,; 而这个SQL,limit后面是从第2条开始读,读取1条信息 ...

  10. SQL SERVER 体系结构图

    http://www.cnblogs.com/woodytu/p/4471386.html