您的位置:首页 > 移动开发 > Android开发

Android 存储学习之保存系统短信到SD卡(使用XML序列化器)

2015-08-03 13:27 459 查看
上节中我们是手动拼接xml文件,但是上节中那样的做法会有一个问题,比如:

//插入消息的内容
sBuffer.append("<body>");
sBuffer.append(sms.getBody() + "</body>");
sBuffer.append("</body>");


我在插入消息内容的时候,在追加内容里面加了个 </body>。 这样就会出现解析错误的



所以这节我们使用xml的序列化器来拼接短信内容。

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

public class MainActivity extends Activity {

List<Message> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

list = new ArrayList<Message>();
}

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() + "<body>");
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序列化器在内部已经自动处理了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息