編輯:關於android開發
本文介紹android中使用pull來解析xml文件
先自己寫一個xml文件,存一些天氣信息
<?xml version="1.0" encoding="UTF-8"?>
<weather>
<city>
<name>廣州</name>
<temp>35</temp>
<pm>23</pm>
</city>
<city>
<name>上海</name>
<temp>30</temp>
<pm>26</pm>
</city>
<city>
<name>北京</name>
<temp>29</temp>
<pm>55</pm>
</city>
</weather>
在定義一個City類
package com.wuyudong.pullparser.domain;
public class City {
private String name;
private String tmp;
private String pm;
@Override
public String toString() {
return "City [name=" + name + ", tmp=" + tmp + ", pm=" + pm + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTmp() {
return tmp;
}
public void setTmp(String tmp) {
this.tmp = tmp;
}
public String getPm() {
return pm;
}
public void setPm(String pm) {
this.pm = pm;
}
}
拿到xml文件
InputStream is = getClassLoader().getResourceAsStream("weather.xml");
拿到pull解析器
XmlPullParser xp = Xml.newPullParser();
開始解析
拿到指針所在當前節點的事件類型
int type = xp.getEventType();
* 事件類型主要有五種
* START_DOCUMENT:xml頭的事件類型
* END_DOCUMENT:xml尾的事件類型
* START_TAG:開始節點的事件類型
* END_TAG:結束節點的事件類型
* TEXT:文本節點的事件類型
如果獲取到的事件類型不是END_DOCUMENT,就說明解析還沒有完成,如果是,解析完成,while循環結束
while(type != XmlPullParser.END_DOCUMENT)
* 當我們解析到不同節點時,需要進行不同的操作,所以判斷一下當前節點的name
* 當解析到weather的開始節點時,new出list
* 當解析到city的開始節點時,創建city對象,創建對象是為了更方便的保存即將解析到的文本
* 當解析到name開始節點時,獲取下一個節點的文本內容,temp、pm也是一樣
case XmlPullParser.START_TAG:
//獲取當前節點的名字
if("weather".equals(xp.getName())){
citys = new ArrayList<City>();
}
else if("city".equals(xp.getName())){
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;
當解析到city的結束節點時,說明city的三個子節點已經全部解析完了,把city對象添加至list
case XmlPullParser.END_TAG:
if("city".equals(xp.getName())){
citys.add(city);
}
完整代碼如下:
package com.wuyudong.pullparser;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import com.wuyudong.pullparser.domain.City;
import android.os.Bundle;
import android.app.Activity;
import android.util.Xml;
import android.view.View;
public class MainActivity extends Activity {
List<City> citys;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View v) {
// 得到xml文件的輸入流
InputStream is = getClassLoader().getResourceAsStream("weather.xml");
// 獲取pull解析器
XmlPullParser xp = Xml.newPullParser();
try {
xp.setInput(is, "utf-8");
// 獲取當前節點的事件類型
int type = xp.getEventType();
City city = null;
while (type != XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG:
// 獲取當前節點的名字
if ("weather".equals(xp.getName())) {
citys = new ArrayList<City>();
} else if ("city".equals(xp.getName())) {
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.setTmp(temp);
} else if ("pm".equals(xp.getName())) {
String pm = xp.nextText();
city.setPm(pm);
}
break;
case XmlPullParser.END_TAG:
if ("city".equals(xp.getName())) {
citys.add(city);
}
break;
default:
break;
}
// 把指針移動到下一個節點,並且返回該節點的事件類型
type = xp.next();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (City city : citys) {
System.out.println(city.toString());
}
}
}
運行程序結果如圖:

Android adb shell命令合集
Android adb shell命令合集 1. 顯示系統中全部Android平台: android list targets  
Android—PopupWindow的簡單使用,androidpopupwindow
Android—PopupWindow的簡單使用,androidpopupwindowPopupWindow 是一個可以顯示在當前 Activity 之上的浮動容器,這個
Intent(三)向下一個活動傳遞數據,intent傳遞
Intent(三)向下一個活動傳遞數據,intent傳遞 向下傳遞活動很簡單,可以我采用putExtra()方法的重載,把
Ubuntu android 開發配置,ubuntuandroid
Ubuntu android 開發配置,ubuntuandroid1. 安裝 Java SDK 1.1下載 jav