02_Android写xml文件和读xml文件
新建Android項目
編寫AndroidManifest.xml,使本Android項目具有單元測試功能和寫外設的權限。
| <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" ??? package="com.itheima28.xmldemo" ??? android:versionCode="1" ??? android:versionName="1.0" > ? ??? <uses-sdk ??????? android:minSdkVersion="8" ??????? android:targetSdkVersion="19" /> ??? ??? <!—用于單元測試—> ??? <instrumentation ??????? android:name="android.test.InstrumentationTestRunner" ??????? android:targetPackage="com.itheima28.xmldemo"> ??? </instrumentation> ??? ??? <!—寫外設的權限à ??? <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> ? ??? <application ??????? android:allowBackup="true" ??????? android:icon="@drawable/ic_launcher" ??????? android:label="@string/app_name" ??????? android:theme="@style/AppTheme" > ??????? <!—單元測試所需à ??????? <uses-library android:name="android.test.runner"/> ??????? ??????? <activity ??????????? android:name="com.itheima28.xmldemo.MainActivity" ??????????? android:label="@string/app_name" > ??????????? <intent-filter> ??????????????? <action android:name="android.intent.action.MAIN" /> ? ??????????????? <category android:name="android.intent.category.LAUNCHER" /> ??????????? </intent-filter> ??????? </activity> ??? </application> ? </manifest> ? |
3 Person對象
| package com.itheima28.xmldemo; ? public class Person { ? ??? private int id; ??? private String name; ??? private int age; ? ??? @Override ??? public String toString() { ?????? return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; ??? } ??? public Person() { ?????? super(); ??? } ??? public Person(int id, String name, int age) { ?????? super(); ?????? this.id = id; ?????? this.name = name; ?????? this.age = age; ??? } ??? public int getId() { ?????? return id; ??? } ??? public void setId(int id) { ?????? this.id = id; ??? } ??? public String getName() { ?????? return name; ??? } ??? public void setName(String name) { ?????? this.name = name; ??? } ??? public int getAge() { ?????? return age; ??? } ??? public void setAge(int age) { ?????? this.age = age; ??? } ? } |
4 寫xml文件和讀xml文件的代碼
| package com.itheima28.xmldemo.test; ? import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; ? import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlSerializer; ? import android.os.Environment; import android.test.AndroidTestCase; import android.util.Log; import android.util.Xml; ? import com.itheima28.xmldemo.Person; ? public class TestCase extends AndroidTestCase { ? ???????? /** ???????? ?* 測試寫xml文件 ???????? ?*/ ???????? public void testWriteXml() { ?????????????????? writeXmlToLocal(); ???????? } ???????? ???????? /** ???????? ?* 測試讀xml文件 ???????? ?*/ ???????? public void testReadXml() { ?????????????????? List<Person> personList = parseXmlFromLocal(); ?????????????????? for (Person person : personList) { ??????????????????????????? Log.i("TestCase",person.toString()); ?????????????????? } ???????? } ???????? ???????? /** ???????? ?* 寫xml文件到本地 ???????? ?*/ ???????? private void writeXmlToLocal() { ?????????????????? List<Person> personList = getPersonList(); ?????????????????? ?????????????????? //獲得序列化對象 ?????????????????? XmlSerializer serializer = Xml.newSerializer(); ?????????????????? ?????????????????? try { ??????????????????????????? //測試獲得到的位置是:/storage/emulated/0 ??????????????????????????? File path = new File(Environment.getExternalStorageDirectory(),"persons.xml"); ?????????????????? ??? FileOutputStream fos = new FileOutputStream(path); ?????????????????? ??? //指定序列化對象輸出的位置和編碼 ?????????????????? ??? serializer.setOutput(fos,"utf-8"); ?????????????????? ??? //寫開始<?xml version='1.0' encoding='utf-8' standalone='yes' ?> ?????????????????? ??? serializer.startDocument("utf-8", true); ?????????????????? ??? ?????????????????? ??? //<persons> ?????????????????? ??? serializer.startTag(null, "persons"); ?????????????????? ??? for (Person person : personList) { ???????????????????????????????????? //開始寫入 ?????????????????? ??? ???????? serializer.startTag(null, "person"); ?????????????????? ??? ???????? serializer.attribute(null, "id", String.valueOf(person.getId())); ?????????????????? ??? ???????? ?????????????????? ??? ???????? //寫名字<name> ?????????????????? ??? ???????? serializer.startTag(null, "name"); ?????????????????? ??? ???????? serializer.text(person.getName()); ?????????????????? ??? ???????? //</name> ??????????????? serializer.endTag(null, "name"); ??????????????? ??????????????? //寫年齡 ??????????????? //<age> ??????????????? serializer.startTag(null, "age"); ??????????????? serializer.text(String.valueOf(person.getAge())); ??????????????? //</age> ??????????????? serializer.endTag(null, "age"); ??????????????? ??????????????? //</persons> ??????????????? serializer.endTag(null, "person"); ?????????????????? ??? } ?????????????????? ??? ?????????????????? ??? //</persons> ??????????? serializer.endTag(null, "persons"); ?????????????????? ??? ??????????? //結束 ??????????? serializer.endDocument(); ?????????????????? } catch (Exception e) { ??????????????????????????? e.printStackTrace(); ?????????????????? } ???????? } ???????? ???????? /** ???????? ?* 用于生成一個List的Person集合 ???????? ?* @return ???????? ?*/ ???????? private List<Person> getPersonList() { ?????????????????? List<Person> personList = new ArrayList<Person>(); ?????????????????? ?????????????????? for (int i = 0; i < 30; i++) { ??????????????????????????? personList.add(new Person(i,"wang" + i, 18 + i)); ?????????????????? } ?????????????????? ?????????????????? return personList; ???????? } ???????? ???????? /** ???????? ?* 解析xml文件并將xml文件中內容寫List集合中 ???????? ?* @return ???????? ?*/ ???????? private List<Person> parseXmlFromLocal() { ?????????????????? try { ?????????????????? ???????? File path = new File(Environment.getExternalStorageDirectory(),"persons.xml"); ??????????????????????????? FileInputStream fis = new FileInputStream(path); ??????????????????????????? ??????????????????????????? //獲得pull解析器對象 ??????????????????????????? XmlPullParser parser = Xml.newPullParser(); ??????????????????????????? //指定解析的文件的編碼格式 ??????????????????????????? parser.setInput(fis,"utf-8"); ??????????????????????????? ???????? ?????????????????? //獲得時間類型 ??????????????????????????? int eventType = parser.getEventType(); ??????????????????????????? ??????????????????????????? List<Person> personList = null; ??????????????????????????? Person person = null; ??????????????????????????? String id; ??????????????????????????? ??????????????????????????? while (eventType != XmlPullParser.END_DOCUMENT) { ???????????????????????????????????? //獲取當前節點的名稱 ???????????????????????????????????? String tagName = parser.getName(); ???????????????????????????????????? ???????????????????????????????????? switch (eventType) { ???????????????????????????????????? //獲得當前節點的名稱 <person> ???????????????????????????????????? case XmlPullParser.START_TAG: ?????????????????????????????????????????????? //<persons> ?????????????????????????????????????????????? if("persons".equals(tagName)) { ??????????????????????????????????????????????????????? personList = new ArrayList<Person>(); ?????????????????????????????????????????????? } else if ("person".equals(tagName)) { //<person id="1"> ??????????????????????????????????????????????????????? person = new Person(); ??????????????????????????????????????????????????????? id = parser.getAttributeValue(null,"id"); ??????????????????????????????????????????????????????? person.setId(Integer.valueOf(id)); ?????????????????????????????????????????????? } else if("name".equals(tagName)) { ??????????????????????????????????????????????????????? person.setName(parser.nextText()); ?????????????????????????????????????????????? } else if("age".equals(tagName)) { //<age> ??????????????????????????????????????????????????????? person.setAge(Integer.parseInt(parser.nextText())); ?????????????????????????????????????????????? } ?????????????????????????????????????????????? break; ???????????????????????????????????? //</persons> ???????????????????????????????????? case XmlPullParser.END_TAG: ?????????????????????????????????????????????? if ("person".equals(tagName)) { ??????????????????????????????????????????????????????? //需要把上面設置好的person對象添加到集合中 ??????????????????????????????????????????????????????? personList.add(person); ?????????????????????????????????????????????? } ?????????????????????????????????????????????? break; ???????????????????????????????????? default: ?????????????????????????????????????????????? break; ???????????????????????????????????? } ???????????????????????????????????? ???????????????????????????????????? //獲得下一個事件類型 ???????????????????????????????????? eventType = parser.next(); ??????????????????????????? } ??????????????????????????? return personList; ?????????????????? } catch (Exception e) { ??????????????????????????? e.printStackTrace(); ?????????????????? } ?????????????????? return null; ???????? } } |
5 設置Log過濾器
6、控制臺輸出結果
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的02_Android写xml文件和读xml文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 半成品包子怎么做
- 下一篇: 大众polo是什么意思?