Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 存儲學習之保存系統短信到SD卡(使用XML序列化器)

Android 存儲學習之保存系統短信到SD卡(使用XML序列化器)

編輯:關於Android編程

上節中我們是手動拼接xml文件,但是上節中那樣的做法會有一個問題,比如:

 

//插入消息的內容
sBuffer.append(
); sBuffer.append(sms.getBody() +); sBuffer.append();
我在插入消息內容的時候,在追加內容裡面加了個 。 這樣就會出現解析錯誤的

 

\

所以這節我們使用xml的序列化器來拼接短信內容。

 

下面的代碼是如何用xml序列化器拼接一個文件:

 

public class MainActivity extends Activity {

	List list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        list = new ArrayList();
    }
    
    public void storageMessage(View v)
    {
    	//得到ContentResolver
    	ContentResolver cr = getContentResolver();
    	
    	//查詢系統的短信,只需要查詢我們關心的字段
    	Cursor cursor = cr.query(Uri.parse(content://sms), new String[]{address, date, type, body}, 
    			null, null, null);
    	
    	//取出查詢到的信息
    	while(cursor.moveToNext())
    	{
    		String address = cursor.getString(cursor.getColumnIndex(address));
    		String date = cursor.getString(cursor.getColumnIndex(date));
    		String type = cursor.getString(cursor.getColumnIndex(type));
    		String body = cursor.getString(cursor.getColumnIndex(body));
    		
    		//將每條短信放入List集合中
    		Message msg = new Message(address, date, type, body);
    		list.add(msg);
    	}
    	
    	//先拿到xml序列化對象
    	XmlSerializer xs = Xml.newSerializer();
    	
    	File file = new File(sdcard/sms2.xml);
    	try {
			FileOutputStream fos = new FileOutputStream(file);
			
			//utf-8用於指定用什麼編碼生成xml文件
			xs.setOutput(fos, utf-8);
			//utf-8指定頭結點中enconding的屬性的值
			xs.startDocument(utf-8, true);
			
			xs.startTag(null, message);
			
			for (Message sms : list) {
				xs.startTag(null, sms);
				
				xs.startTag(null, address);
				xs.text(sms.getAddress());
				xs.endTag(null, address);
	
				xs.startTag(null, type);
				xs.text(sms.getType());
				xs.endTag(null, type);
				
				xs.startTag(null, date);
				xs.text(sms.getDate());
				xs.endTag(null, date);
				
				xs.startTag(null, body);
				xs.text(sms.getBody() +);
				xs.endTag(null, body);
				
				xs.endTag(null, sms);
			}
			
			xs.endTag(null, message);
			
			//告訴序列化器,文件生成完畢
			xs.endDocument();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	
    }
}

可以看到,我故意給短信的內容加了個body。

 

\

導出來查詢備份的文件信息:

\

可以看到xml序列化器在內部已經自動處理了。

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved