Android 存储学习之保存系统短信到SD卡(使用XML序列化器)
2015-08-03 13:27
459 查看
上节中我们是手动拼接xml文件,但是上节中那样的做法会有一个问题,比如:
我在插入消息内容的时候,在追加内容里面加了个 </body>。 这样就会出现解析错误的
所以这节我们使用xml的序列化器来拼接短信内容。
下面的代码是如何用xml序列化器拼接一个文件:
可以看到,我故意给短信的内容加了个body。
导出来查询备份的文件信息:
可以看到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序列化器在内部已经自动处理了。
相关文章推荐
- Android 存储学习之保存系统短信到SD卡
- [Android百度地图SDK开发] (一)配置环境与HelloWorld
- [深入理解Android卷二 全文-第八章]深入理解ContentService和AccountManagerService
- 我是如何自学Android,资料分享(2015 版)
- android用户界面之菜单(Menu)教程实例汇总
- [深入理解Android卷二 全文-第七章]深入理解ContentProvider
- Android 自定义view之FontMetric
- Android实战简易教程-第三十一枪(基于加速度传感器的摇一摇功能实例)
- android onTouchEvent和setOnTouchListener中onTouch的区别
- Android开发之定义内部类简单实现60s倒计时
- android与javascript的交互
- android事件传递机制的浅谈
- [深入理解Android卷二 全文-第六章]深入理解ActivityManagerService
- android事件传递流程 onTouchEvent onInterceptTouchEvent()
- Android IOS WebRTC 音视频开发总结(三六)-- easyRTC介绍
- [深入理解Android卷二 全文-第五章]深入理解PowerManagerService
- Android - 事件模型-事件传递,处理机制
- Android 简单sd卡浏览器
- android 占位符使用