編輯:關於Android編程
Java 中是可以用 SAX 和 DOM 解析 XML 的,雖然在 Android 下也可以用這2中方式,但是還是推薦用 Pull。Pull 使用簡單,效率相對高,Android 下是集成了 Pull ,所以並不需要用到第三方的包。
下面來舉例子,我要向 XML 文檔中讀寫學生信息,首先我定義一個學生類,包含ID、學號、姓名和年齡
public class Student { public Student() {}; public Student(int id, int number, String name, int age) { this.id = id; this.number = number; this.name = name; this.age = age; } private int id; private int number; private String name; private int age; public int getId() { return id; } public int getNumber() { return number; } public String getName() { return name; } public int getAge() { return age; } public void setId(int id) { this.id = id; } public void setNumber(int number) { this.number = number; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [number=" + number + ", name=" + name + ", age=" + age + "]"; } }
33 張三 2029 李四 19
然後我寫了個 XmlHelper 類,有個靜態方法 getStudes,該方法接受輸入流,返回學生信息的集合
public static ListgetStudents(InputStream xml) throws Exception { List students = null; Student student = null; XmlPullParser parser = Xml.newPullParser(); //得到 Pull 解析器 parser.setInput(xml, "UTF-8"); //設置輸入,編碼為 UTF-8 int event = parser.getEventType(); //得到事件類型,每讀取到一個位置都有相對的事件類型 while (XmlPullParser.END_DOCUMENT != event) { //沒到文檔結尾就要循環讀取 switch (event) { case XmlPullParser.START_DOCUMENT: //這是文檔開始事件,我們在這個地方做一些初始化工作 students = new ArrayList (); break; case XmlPullParser.START_TAG: //標簽開始事件,標簽開始就是上面XML中的 、 、 時說明一個學生的信息已經讀取完了 if (parser.getName().equals("student")) { students.add(student); student = null; } break; default: break; } event = parser.next(); //一個讀取完了,就下一個,如此循環 } return students; }、 、和 if (parser.getName().equals("student")) { //讀取到這個 student 標簽就說明下面就是我需要的信息了 int id = Integer.valueOf(parser.getAttributeValue(0)); student = new Student(); student.setId(id); } if (null != student) { //避免出現空指針,先判斷一下再繼續 if (parser.getName().equals("number")) { int number = Integer.valueOf(parser.nextText()); // nextText() 就是得到標簽後面的文本 student.setNumber(number); }else if (parser.getName().equals("name")) { String name = parser.nextText(); student.setName(name); }else if (parser.getName().equals("age")) { int age = Integer.valueOf(parser.nextText()); student.setAge(age); } } break; case XmlPullParser.END_TAG: //讀取到
public static void generate(Liststudents, OutputStream os) throws Exception { XmlSerializer serializer = Xml.newSerializer(); //得到序列化器 serializer.setOutput(os, "UTF-8"); //設置輸出 serializer.startDocument("UTF-8", true); //文檔開始了 serializer.startTag(null, "students"); //標簽開始了 for (Student student : students) { serializer.startTag(null, "student"); //子標簽開始了 serializer.attribute(null, "id", String.valueOf(student.getId())); //指定該標簽屬性,這裡是ID //下面3個就是生成學號、姓名和年齡 serializer.startTag(null, "number"); serializer.text(String.valueOf(student.getNumber())); serializer.endTag(null, "number"); serializer.startTag(null, "name"); serializer.text(student.getName()); serializer.endTag(null, "name"); serializer.startTag(null, "age"); serializer.text(String.valueOf(student.getAge())); serializer.endTag(null, "age"); serializer.endTag(null, "student"); //子標簽結束 } serializer.endTag(null, "students"); //標簽結束 serializer.endDocument(); //文檔結束 os.flush(); //如果傳入的輸出流不是文件,就就要刷新一下緩沖區 os.close(); } }
public class XmlHelperTest extends AndroidTestCase { private static final String TAG = "XmlHelperTest"; public void testGetStudents() throws Exception { InputStream xmlIstm = this.getClass().getClassLoader().getResourceAsStream("students.xml"); Liststudents = XmlHelper.getStudents(xmlIstm); for (Student student : students) { Log.i(TAG, student.toString()); } } public void testGenerate() throws Exception { List students = new ArrayList (); students.add(new Student(1, 13, "小建", 21)); students.add(new Student(2, 16, "大康", 20)); File xmlFile = new File(getContext().getFilesDir(), "students.xml"); FileOutputStream fos = new FileOutputStream(xmlFile); try { XmlHelper.generate(students, fos); Log.i(TAG, "生成XML文件成功"); } catch(Exception e) { Log.i(TAG, "生成XML文件失敗:" + e.getMessage()); } } }
本系列博文我想圍繞在Android中的一些優化細節和大家進行分享。Android中的優化可謂又是一重任,Android不足以像PC端具有很高的內存執行空間給我們用來重量級
百度定位的環境配置1. 獲取密鑰通過開放平台進行應用注冊獲取百度提供的appkey值,這個值用於進行定位時的認證。選擇android端app勾選所有權限進行app的注冊。
我寫一個開源的安卓文件器。源代碼在github:源代碼 # File_Explorer# Android 文件管理器包常用ui控件有:1.側滑菜單sliding
這是谷歌官方給我們提供的一個兼容低版本安卓設備的軟件包,裡面包囊了只有在安卓3.0以上可以使用的api。而viewpager就是其中之一利用它,我們可以做很多事情,從最簡