ANDROID基础学习笔记_4_生成xml文件

在之前学到的关于保存数据的方式时,我介绍了一种用SharedPreferences类保存数据信息成xml文件。具体实现请看这里

那么,它是如何实现的呢,这也正是今天我要写下的内容:生成xml文件。

我们肯定用过备份数据的app,短信啊照片啊,根据这个实际的业务需求,今天就来实现以下短信数据的备份。

1. 首先是设计一个按钮,假设单击这个按钮后会自动备份手机上的短信到sd卡。

那么我们就要给这个按钮绑定单击事件。事件里面当然就是写如何把数据存到xml文件以实现备份功能。

因为不知道怎么获取手机短信,那么首先我们需要模拟获取手机短信的功能。

很简单的定义一个list,放置所有短信的集合。每条短信都有发送时间、内容、收信人/发信人、id。

然后就可以很简单的在备份按钮的单击事件里写生成xml文件的代码了。

先定义StringBuilder,然后调用该类的append方法,先添加xml文件编码格式"<?xml version=\"1.0\" encoding=\"utf-8\"?>"

然后就是添加自己定义的标签,比如短信集<smss>短信<sms>短信内容<body>等等,在写完开始标签后记得写结束标签。没什么难度吧,这是第一种。

2. 第二种跟第一种的差别在于,它用到了另外一个类,XmlSerializer。

在定义好文件输出流的实例后,用XmlSerializer的实例的setOutput方法指定文件并指定编码格式

XmlSerializer x =  Xml.newSerializer();
			File f = new File(Environment.getExternalStorageDirectory(),"backUp2Sms.xml");
			FileOutputStream fos = new FileOutputStream(f);
			//初始化序列化器 指定xml数据写入到哪个文件 并且指定文件编码格式
			x.setOutput(fos, "UTF-8");
紧接着,就可以看开始xml文件的输出了,首先跟第一种方法一样,先添加文件编码格式,不过是用x.startDocument()方法来添加的,传递了两个参数,第一个是编码格式,第二个参数是是否独立。

接下来是用x.startTag()方法进行创建标签,也是两个参数,第一个命名空间,第二个标签名字。命名空间不是太懂。。。

当你需要向一个标签添加属性的时候,你需要调用x.attribute()方法,传递三个参数,分别是命名空间,参数名,参数值。

当需要设置标签内的内容时,调用x.text()方法,结束标签跟开始差不多,只不过是start换成了end,最终结束文档时的标签是x.endDocument()方法。

x.startDocument("UTF-8", true);
			x.startTag(null, "smss");
			for(SmsInfo s : list){
				x.startTag(null, "sms");
				x.attribute(null, "id", s.getId()+"");
				x.endTag(null, "sms");
				x.startTag(null, "address");
				x.text(s.getAddress());
				x.endTag(null, "address");
				x.startTag(null, "body");
				x.text(s.getBody());
				x.endTag(null, "body");
				x.startTag(null, "date");
				x.text(s.getDate()+"");
				x.endTag(null, "date");
				x.startTag(null, "type");
				x.text(s.getType()+"");
				x.endTag(null, "type");
			}
			x.endTag(null, "smss");
			x.endDocument();
			fos.close();
			Toast.makeText(this, "备份成功", 0).show();
这就是所谓的两种生成的xml的方式,没感觉第二种有什么优势,也可能因为没有实战经验。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值