標籤:
之前備份簡訊的時候產生xml都是手動拼字的,有一個問題:當簡訊裡面存在</body>這樣的標籤的時候,最後結果就不是完整的xml檔案,顯然出錯。但是,今天使用序列化器的方式,就能有效解決上邊遇到的問題。就看一下序列化器如何產生xml檔案:
給活動定義一個布局檔案,裡面知識簡單的加入一個按鈕:
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="備分簡訊" android:onClick="click" />
看主活動中的代碼如下:
package com.itydl.xmlserializer;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlSerializer;import com.itydl.createxml.domain.Message;import android.os.Bundle;import android.os.Environment;import android.app.Activity;import android.content.Context;import android.util.Xml;import android.view.Menu;import android.view.View;//為了更好地儲存不同,且負責的資料,使用xml序列器public class MainActivity extends Activity {List<Message> smsList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 虛擬10條簡訊smsList = new ArrayList<Message>();for (int i = 0; i < 10; i++) {Message sms = new Message("小志好棒" + i, System.currentTimeMillis()+ "", "138" + i + i, "1");smsList.add(sms);}}public void click(View v){//使用xml序列化器產生xml檔案。序列化器會把亂七八糟的東西(簡訊裡有標籤屬性)過濾掉//1.拿到序列化器對象XmlSerializer xs = Xml.newSerializer();//2.初始化.因為涉及到xml檔案,因此初始化也包含檔案名稱和路徑File file = new File(Environment.getExternalStorageDirectory(),"sms.xml");try {FileOutputStream fos = new FileOutputStream(file);//enconding:指定用什麼編碼產生xml檔案xs.setOutput(fos, "utf-8");//setOutput(OutputStream os, String encoding) ,編碼方式預設u8//3.開始產生xml檔案//enconding:指定頭結點中的enconding屬性的值xs.startDocument("utf-8", true);//產生頭結點(最高一行),startDocument(String encoding, Boolean standalone) xs.startTag(null, "message");//產生一個根節點,開始標籤節點for (Message sms : smsList) {xs.startTag(null, "sms");xs.startTag(null, "body");//start和end一對一對的寫。還有四個子節點xs.text(sms.getBody() + "<body>");//這樣不會報錯。而是把<body>當做了內容了xs.endTag(null, "body");xs.startTag(null, "date");xs.text(sms.getDate());xs.endTag(null, "date");xs.startTag(null, "type");xs.text(sms.getType());xs.endTag(null, "type");xs.startTag(null, "address");xs.text(sms.getAddress());xs.endTag(null, "address");xs.endTag(null, "sms");}xs.endTag(null, "message");//告訴序列化器,檔案產生完畢xs.endDocument();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }}
當然,對sdcard寫,需要寫入權限。加入即可:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
運行程式,點擊備份按鈕。我們可以在sdcard目錄找到這個檔案:
匯出來看一下裡面的格式如下:
後邊省略,產生的xml檔案是沒有問題的。看到即使文本裡面出現了<body>標籤,也不會出現錯誤
Android初級教程:使用xml序列器