天天看點

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) {

       this.id = id;

       this.name = name;

       this.age = age;

    public int getid() {

       return id;

    public void setid(int id) {

    public string getname() {

       return name;

    public void setname(string name) {

    public int getage() {

       return age;

    public void setage(int 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集合中

         private list<person> parsexmlfromlocal() {

                            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);

                                     default:

                                     }

                                     //獲得下一個事件類型

                                     eventtype = parser.next();

                            }

                            return personlist;

                   return null;

5 設定log過濾器

02_Android寫xml檔案和讀xml檔案

6、控制台輸出結果

02_Android寫xml檔案和讀xml檔案