編輯:關於Android編程
在安卓中有很多種解析方式。按照大方向有xml解析和json解析。而,細致的分,xml和json解析各有自己的很多解析方式。今天這一篇主要介紹xml解析中的pull解析。對於xml的解析方式,我之前在javaweb一些知識中有寫過dom和dom4j等等解析方式。有興趣的讀者可以去javaweb篇裡面找相關的內容。
先自定義一個數據源,假設就是訪問服務器返回的xml數據文件名稱為weather.xml:
北京 5° 80 西安 -5° 800 南京 12° 60
針對此,建立一個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 cityList;
@Override
protected 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是一個接口,不可以new
XmlPullParser 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的javabean
cityList = new ArrayList();
}
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 block
e.printStackTrace();
}
}
}
運行程序,解析結果如下:

安卓系統自定義刪除空間功能怎麼用 安卓自定義刪除空間是什麼
安卓系統近日正在測試一項新功能,在設備儲存空間不足的情況下會自動尋找並給出刪除建議,安卓系統自定義刪除空間功能怎麼用?下載吧小編就一起來參考一下。 安卓系
Android用OpenGL ES2.0顯示YUV數據,在手機上需要兩種坐標系的解決方案
裡面評論有很多人提到了這個問題,我也是其中一員,但是問遍了所有人,自己也發帖(http://bbs.csdn.net/topics/390769358) 尋
Android 時間攔截機制
對於Android事件攔截機制,相信對於大多數Android初學者是一個抓耳撓腮難於理解的問題。其實理解這個問題並不困難。首先,你的明白事件攔截機制到底是怎麼一回事?這裡
Android項目:App登陸模塊的實現
模塊實現前,先說兩點:第一點、登陸模塊的實現,是多數APP的基礎功能。第二點、數據庫用的不是MySQL,Oracle等,Android項目,多數還是會用到SQLite.現