在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. 机器学习中jupyter lab的安装方法以及使用的命令

    安装JupyterLab使用pip安装: pip install jupyterlab# 必须将用户级目录添加 到环境变量才能启动pip install --userbinPATHjupyter la ...

  2. Tkinter图形界面设计(GUI)

    [因为这是我第一个接触的GUI图形界面python库,现在也不用了,所以大多数内容都来自之前花 钱买的一些快速入门的内容,可以当作简单的知识点查询使用] 在此声明:内容来自微信公众号GitChat,付 ...

  3. Leetcode 39.组合总数

    组合总数 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字可以无限 ...

  4. python实现字符串之间的映射

    类似于凯撒密码一样的加密 # *-* coding=utf-8 *-* import string intab = string.lowercase outtab = 'qwertyuiopasdfg ...

  5. noip模拟赛 黑骑士

    题目描述江爷爷给你出了一道题:给你一个图,保证每个点最多属于一个简单环,每个点度数最多为3,求这个图有多少“眼镜图形个数”保证图联通哦~其中“眼镜图形个数”,定义为三元组(x,y,S),其中x和y表示 ...

  6. hdu 4171 最短路

    #include<stdio.h> #include<string.h> #include<queue> #include<iostream> usin ...

  7. SecureCRT的设置和美化

    一  . SecureCRT 7.1  的 安装     http://liufei888.blog.51cto.com/2625545/1306231 1.下载注册机SecureCRT.v.6.7. ...

  8. nyoj_782_星期几?_201312071940

    星期几? 时间限制:500 ms  |           内存限制:65535 KB 难度:2   描述                      Acmer 小鱼儿 埋头ku算一道题 条件:已知给 ...

  9. ps f

    这个命令可以以树形结构列出进程信息.可以清楚的看清父进程子进程直接的关系.可笑我之前还以为所有的命令参数都是带有一个中划线的. 不过,这里列出的进程好像不全.应该仔细的看看ps 的命令. [root@ ...

  10. HDU 5242 上海大都会 G题

    这道题其实是求K条最长的不重叠的链.贪心算法+DFS即可求.深度优先搜索时,返回当前子树的最长链,使用优先队列保存其他孩子结点的最长链,即可.求结果时只需从优先队列中取前K个值的和.这相当于暴力删除每 ...