Android实战教程第九篇之短信高效备份
Android短信高效备份这篇文章,承接上一篇。使用高效的方式备份短信——xml序列化器。
存储短信,要以对象的方式存储。首先创建javabean:
packagecom.itydl.createxml.domain;
publicclassMessage{
privateStringbody;
privateStringdate;
privateStringaddress;
privateStringtype;
publicStringgetBody(){
returnbody;
}
publicvoidsetBody(Stringbody){
this.body=body;
}
publicStringgetDate(){
returndate;
}
publicvoidsetDate(Stringdate){
this.date=date;
}
publicStringgetAddress(){
returnaddress;
}
publicvoidsetAddress(Stringaddress){
this.address=address;
}
publicStringgetType(){
returntype;
}
publicvoidsetType(Stringtype){
this.type=type;
}
publicMessage(Stringbody,Stringdate,Stringaddress,Stringtype){
super();
this.body=body;
this.date=date;
this.address=address;
this.type=type;
}
}
接着在mainactivity中的diamante如下:
packagecom.itydl.xmlserializer;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.List;
importorg.xmlpull.v1.XmlSerializer;
importcom.itheima.createxml.domain.Message;
importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.util.Xml;
importandroid.view.Menu;
importandroid.view.View;
//为了更好地保存不同,且负责的数据,使用xml序列器
publicclassMainActivityextendsActivity{
List<Message>smsList;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//虚拟10条短信
smsList=newArrayList<Message>();
for(inti=0;i<10;i++){
Messagesms=newMessage("小志好棒"+i,System.currentTimeMillis()
+"","138"+i+i,"1");
smsList.add(sms);
}
}
publicvoidclick(Viewv){
//使用xml序列化器生成xml文件。序列化器会把乱七八糟的东西(短信里有标签属性)过滤掉
//1.拿到序列化器对象
XmlSerializerxs=Xml.newSerializer();
//2.初始化.因为涉及到xml文件,因此初始化也包含文件名和路径
Filefile=newFile("sdcard/sms2.xml");
try{
FileOutputStreamfos=newFileOutputStream(file);
//enconding:指定用什么编码生成xml文件
xs.setOutput(fos,"utf-8");//setOutput(OutputStreamos,Stringencoding),编码方式默认u8
//3.开始生成xml文件
//enconding:指定头结点中的enconding属性的值
xs.startDocument("utf-8",true);//生成头结点(最高一行),startDocument(Stringencoding,Booleanstandalone)
xs.startTag(null,"message");//生成一个根节点,开始标签节点
for(Messagesms: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(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
最后也要记得加入权限:
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
可见这种方式解决了前面遇到的问题,而且高效了很多。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。