Android 解析XML—pull解析方式
在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解析方式的更多相关文章
- android解析xml文件的方式
android解析xml文件的方式 作者:东子哥 ,发布于2012-11-26,来源:博客园 在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xm ...
- Xml解析之PULL解析 例1
<?xml version="1.0" encoding="UTF-8"?> <persons> <person id=" ...
- JAVA解析XML之SAX方式
JAVA解析XML之SAX方式 SAX解析xml步骤 通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory 通过SAXParse ...
- JAVA解析XML之DOM方式
JAVA解析XML之DOM方式 准备工作 创建DocumentBuilderFactory对象; 创建DocumentBuilder对象; 通过DocumentBuilder对象的parse方法 ...
- Java解析XML文件的方式
在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求.一般来讲,有基于DOM树和SAX的两种解析xml文件的方式 ...
- Android:XML简介 & 解析方式对比(DOM、SAX、PULL)
目录 示意图 1. 定义 XML,即 extensible Markup Language ,是一种数据标记语言 & 传输格式 2. 作用 对数据进行标记(结构化数据).存储 & ...
- Android 下用 Pull 解析和生成 XML
Java 中是可以用 SAX 和 DOM 解析 XML 的,虽然在 Android 下也可以用这2中方式,但是还是推荐用 Pull.Pull 使用简单,效率相对高,Android 下是集成了 Pul ...
- android解析xml (pull)
1. xml <persons> <person id="18"> <name>furong</name> <age>2 ...
- Android 生成和Pull解析xml
一.单个对象生成xml 生成以下xml,该怎么生成呢? <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <accou ...
随机推荐
- textarea 提交到数据库的内容,输出到 html 中显示正常的格式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ARC 73 E - Ball Coloring
E - Ball Coloring Time limit : 2sec / Memory limit : 256MB Score : 700 points Problem Statement Ther ...
- log4net的相关使用笔记
1, XmlConfigurator 创建添加一个Tracer project,引用nuget上最新的log4net 在Tracer里新增一个AppLog类: public static class ...
- Win8.1 Hyper-V 共享本机IP上网
公司的Win8.1自带了Hyper v,可是死活连接不到网络. 原因是公司只给每人分配一个局域网IP,而默认情况下Hyper-V的虚拟机会动态分配了一个没有经过MIS人员许可的IP…… 百度了N久解决 ...
- Debug 集子
一. 001.c: 在函数 'main' 中: 001.c:8: 错误:'start' 的存储大小未知 001.c:9: 错误:'end' 的存储大小未知 ====================== ...
- MapReduce Shuffle优化方向
Shuffle过程介绍可以查看该博客:http://langyu.iteye.com/blog/992916 优化方向: 压缩:对数据进行压缩,减少写读数据量: 减少不必要的排序:并不是所有类型的Re ...
- ZooKeeper是什么(转)
ZooKeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提 ...
- Linux: 统计代码行数和SVN修改行数的命令
Mac下同样有效. 1. 统计目录下所有js文件的代码行数. find . -name '*.js' | xargs wc -l 2. 统计SVN的修改行数. svn diff -rBeginRev: ...
- HTML5:防止页面在移动设备上缩放
在制作网页时,如果对移动设备有做兼容设计的话,通常是不希望页面在移动设备能够被缩放.这样可以防止原先设计好的样式被破坏.要做到这一点,只需要在网页的head部分加入如下语句即可: <!-- 屏蔽 ...
- 设置ckeditor的高度
设置ckeditor的高度 CKEDITOR.replace('text', { filebrowserImageUploadUrl : 'upload_img.do', language : 'zh ...