編輯:關於Android編程
今天我們一起通過一個小例子來學習一下使用PULL解析器解析XML文件。
(1)首先我們放一個文件名為beauties.xml的XML文件到assets目錄下,文件內容如下:
范冰冰 28楊冪 23
package com.pulltest;
public class Beauty {
//美女姓名
private String name;
//美女年齡
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "美女資料 [年齡=" + age + ", 姓名=" + name + "]";
}
}
package com.pulltest;
import java.io.InputStream;
import java.util.List;
public interface IBeautyParser {
/**
*
* 解析輸入流,獲取Beauty列表
* @param is
* @return
* @throws Exception
*/
public List parse(InputStream is) throws Exception;
/**
*
* 序列化Beauty對象集合,得到XML形式的字符串
* @param beauties
* @return
* @throws Exception
*/
public String serialize(List beauties) throws Exception;
}
package com.pulltest;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import android.util.Xml;
public class BeautyParserImpl implements IBeautyParser{
@Override
public List parse(InputStream is) throws Exception {
List mList = null;
Beauty beauty = null;
// 由android.util.Xml創建一個XmlPullParser實例
XmlPullParser xpp = Xml.newPullParser();
// 設置輸入流 並指明編碼方式
xpp.setInput(is,"UTF-8");
// 產生第一個事件
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT){
switch (eventType) {
// 判斷當前事件是否為文檔開始事件
case XmlPullParser.START_DOCUMENT:
mList = new ArrayList(); // 初始化books集合
break;
// 判斷當前事件是否為標簽元素開始事件
case XmlPullParser.START_TAG:
if (xpp.getName().equals("beauty")) { // 判斷開始標簽元素是否是book
beauty = new Beauty();
} else if (xpp.getName().equals("name")) {
eventType = xpp.next();//讓解析器指向name屬性的值
// 得到name標簽的屬性值,並設置beauty的name
beauty.setName(xpp.getText());
} else if (xpp.getName().equals("age")) { // 判斷開始標簽元素是否是book
eventType = xpp.next();//讓解析器指向age屬性的值
// 得到age標簽的屬性值,並設置beauty的age
beauty.setAge(xpp.getText());
}
break;
// 判斷當前事件是否為標簽元素結束事件
case XmlPullParser.END_TAG:
if (xpp.getName().equals("beauty")) { // 判斷結束標簽元素是否是book
mList.add(beauty); // 將book添加到books集合
beauty = null;
}
break;
}
// 進入下一個元素並觸發相應事件
eventType = xpp.next();
}
return mList;
}
@Override
public String serialize(List beauties) throws Exception {
// TODO Auto-generated method stub
return null;
}
}
package com.pulltest;
import java.io.InputStream;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import com.example.pulltest.R;
public class PullTestActivity extends Activity{
//裝載Beauty類型的鏈表,其內容由XML文件解析得到
private List beautyList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pulltest);
try {
//通過assertmanager的open方法獲取到beauties.xml文件的輸入流
InputStream is = this.getAssets().open("beauties.xml");
//初始化自定義的實現類BeautyParserImpl
BeautyParserImpl pbp = new BeautyParserImpl();
//調用pbp的parse()方法,將輸入流傳進去解析,返回的鏈表結果賦給beautyList
beautyList = pbp.parse(is);
} catch (Exception e) {
e.printStackTrace();
}
setupViews();
}
/**
* 將數據顯示到手機界面上
*/
private void setupViews(){
String result = "";
for (Beauty b : beautyList) {
result += b.toString();
}
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(result);
}
}
Android之PULL解析XML
深入理解Android中的Handler異步通信機制
一、問題:在Android啟動後會在新進程裡創建一個主線程,也叫UI線程(非線程安全)這個線程主要負責監聽屏幕點擊事件與界面繪制。當Application需要進行耗時操作
【Android基礎知識】網絡操作:Json生成與解析
簡介這裡主要介紹Android生成一個Json格式的字符串,客戶端通過網絡獲取服務器端生成的Json字符串進行解析,根據解析出來的Url去網絡獲取圖片並顯示在ListVi
Android自定義View(三)
本文講的是自定義View的第二種方式-----創建復合控件創建復合(組合)可以很好的創建出具有重用功能的控件集合。這種方式通常需要繼承一個ViewGroup,再給它添加指
Android Studio老是提示重啟ADB解決!
有時候你把手機接到電腦上調試時,Android Studio總是提示你重啟ADB,但是你點重啟後,立馬又跳出那個提示重啟的對話框。會再跳出提示對話框是因為你ADB重啟沒有