前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 存储学习之保存系统短信到SD卡(使用XML序列化器)

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

作者头像
DragonKingZhu
发布2022-05-08 16:35:43
5610
发布2022-05-08 16:35:43
举报

上节中我们是手动拼接xml文件,但是上节中那样的做法会有一个问题,比如:

代码语言:javascript
复制
//插入消息的内容
sBuffer.append("<body>");
sBuffer.append(sms.getBody() + "</body>");
sBuffer.append("</body>");

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

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

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

代码语言:javascript
复制
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序列化器在内部已经自动处理了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档