編輯:關於Android編程
Android中解析xml是非常常用的操作,除了SAX和DOM兩種最常用的解析xml外,Android內置的Pull解析器解析XML文件。
在Android的源碼中大量的使用Pull解析,pull不僅更加的面相對象,而且使用速度和效率更高。
Pull解析器是一個開源的java項目,既可以用於android,也可以用於JavaEE。如果用在javaEE需要把其jar文件放入類路徑中,因為Android已經集成進了Pull解析器,所以無需添加任何jar文件。android系統本身使用到的各種xml文件,其內部也是采用Pull解析器進行解析的。 Pull解析器的運行方式與 SAX 解析器相似。它提供了類似的事件,如:開始元素和結束元素事件,使用parser.next()可以進入下一個元素並觸發相應事件。跟SAX不同的是, Pull解析器產生的事件是一個數字,而非方法,因此可以使用一個switch對感興趣的事件進行處理。當元素開始解析時,調用parser.nextText()方法可以獲取下一個Text類型節點的值。
下面代碼演示如何使用Pull解析器:
如有一個person.xml
liming 30zhangxiaoxiao 25
package com.andy.domain;
public class Person {
private Integer id;
private String name;
private Integer age;
public Person() {
}
public Person(Integer id, String name, Integer age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
package com.andy.service;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
import android.util.Xml;
import com.andy.domain.Person;
public class PersonService {
public static List getPersons(InputStream xml)
throws XmlPullParserException, IOException {
List persons = null;
Person person = null;
// XmlPullParser pullParser =
// XmlPullParserFactory.newInstance().newPullParser();
XmlPullParser pullParser = Xml.newPullParser();
pullParser.setInput(xml, "UTF-8"); // 為xml設置要解析的xml數據
int eventType = pullParser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList();
break;
case XmlPullParser.START_TAG:
if ("person".equals(pullParser.getName())) {
int id = Integer.valueOf(pullParser.getAttributeValue(0));
person = new Person();
person.setId(id);
}
if ("name".equals(pullParser.getName())) {
String name = pullParser.nextText();
person.setName(name);
}
if ("age".equals(pullParser.getName())) {
int age = Integer.valueOf(pullParser.nextText());
person.setAge(age);
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(pullParser.getName())) {
persons.add(person);
person = null;
}
break;
}
eventType = pullParser.next();
}
return persons;
}
public static void savePerson(List persons,
OutputStream outputStream) throws IllegalArgumentException,
IllegalStateException, IOException {
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(outputStream, "UTF-8");
serializer.startDocument("UTF-8", true);
serializer.startTag(null, "persons");
for (Person person : persons) {
serializer.startTag(null, "person");
serializer.attribute(null, "id", person.getId().toString());
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(person.getAge().toString());
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
serializer.endTag(null, "persons");
serializer.endDocument();
outputStream.flush();
outputStream.close();
}
}
微信指紋支付怎麼取消 微信指紋支付取消方法
微信指紋支付是目前微信為了進一步提升交易安全所推出的支付驗證手段,但也有很多用戶在使用中會發現很多小問題,比如手上出汗時,就不能順利驗證支付,小編就這個問題
Android 多線程之HandlerThread 完全詳解
之前對線程也寫過幾篇文章,不過倒是沒有針對android,因為java與android在線程方面大部分還是相同,不過本篇我們要介紹的是android的專屬類Handler
Android的對稱加密與Base64加密
對稱加密是最快速、最簡單的一種加密方式,加密(encryption)與解密(decryption)用的是同樣的密鑰(secret key)。常用的對稱加密方式為:DES,
非ROOT實現靜默安裝的一些思考與體會,AIDL獲取IPackageManager,反射ServiceManager,系統簽名
最近自家的系統要做一個升級服務,裡面有三個功能,第一個是系統升級,也就是下載OTA包推送到recovery裡升級的,而第二個是MCU升級,這就涉及到我們自家系統的一些情況