[android] xml文件的序列化
生成xml文件,模拟备份短信,创建短信的业务bean,创建一个domain的包放业务bean,这个业务bean里面,定义成员属性,生成get set方法,生成有参和无参的构造方法。
生成随机数,实例化Random,调用Random对象的nextInt(n)方法,生成0到n之间的随机数,获取当前系统的时间戳System.currentTimeMillis(),使用for循环,循环生成一个list集合,代表短信的内容
点击保存按钮以后,使用StringBuilder对象append()拼接成一个xml的文件内容,根据上几节内容保存的SD卡中。记住要在清单文件中加权限
android.permission.WRITE_EXTERNAL_STORAGE,如果出现两个清单文件,不能删除这个,是工具bug。如果右键部署的时候,又开启了一个模拟器,那么这是adb挂掉了,关闭eclipse,在任务管理器中关闭adb.exe,重新打开eclipse。
以上是传统方式,android提供了一个面向对象的方式
获取XmlSerilier对象,通过Xml.newSerilier()方法
调用XmlSerilier对象的setOutput(os,encoding)方法,文件输出流,编码
调用XmlSerilier对象的startDocument(encoding,standalone)方法,xml文件的声明,编码,是否独立
调用XmlSerilier对象的startTag(namespace,name)方法,开始节点,命名空间,节点名称
调用XmlSerilier对象的endTag(namespace,name)方法,结束节点,命名空间,节点名称
调用XmlSerilier对象的attribute(namespace,name,value)方法,节点属性,命名空间,属性名称,属性值
调用XmlSerilier对象的text()方法,节点内容
activity代码:
package com.tsh.makexml; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Random; import org.xmlpull.v1.XmlSerializer; import com.tsh.makexml.domain.SmsInfo; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import android.provider.Telephony.Sms; import android.util.Xml; import android.view.View; import android.widget.Toast; public class MainActivity extends Activity { private List<SmsInfo> smsInfos; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); smsInfos=new ArrayList<SmsInfo>(); Random random=new Random(); String num="188000000"; for(int i=0;i<10;i++){ int type=random.nextInt(2)+1; smsInfos.add(new SmsInfo(System.currentTimeMillis(),type,"短信内容"+i,num+i)); } } /** * 备份短信第一种 * @param v */ public void backSms(View v){ StringBuilder sb=new StringBuilder(); sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); sb.append("<smss>"); for(SmsInfo sms:smsInfos){ sb.append("<body>"+sms.getMessage()+"</body>"); sb.append("<date>"+sms.getDate()+"</date>"); sb.append("<type>"+sms.getType()+"</type>"); sb.append("<tel>"+sms.getAddress()+"</tel>"); } sb.append("</smss>"); try { File file=new File(Environment.getExternalStorageDirectory(),"backup.xml"); FileOutputStream fos=new FileOutputStream(file); fos.write(sb.toString().getBytes()); fos.close(); Toast.makeText(this, "保存成功", 0).show(); } catch (Exception e) { Toast.makeText(this, "保存失败", 0).show(); } } /** * 备份短信第二种 * @param v */ public void backSms2(View v){ XmlSerializer serializer=Xml.newSerializer(); try { File file=new File(Environment.getExternalStorageDirectory(),"backup2.xml"); FileOutputStream os=new FileOutputStream(file); serializer.setOutput(os, "utf-8"); serializer.startDocument("utf-8", true); serializer.startTag(null, "smss"); for(SmsInfo sms:smsInfos){ serializer.startTag(null, "sms"); serializer.attribute(null, "tel", sms.getAddress()); serializer.text(sms.getMessage()); serializer.endTag(null, "sms"); } serializer.endTag(null, "smss"); serializer.endDocument(); os.close(); Toast.makeText(this, "保存成功", 0).show(); } catch (Exception e) { Toast.makeText(this, "保存失败", 0).show(); } } }
业务bean代码:
package com.tsh.makexml.domain; public class SmsInfo { private long date; private int type; private String message; private String address; public SmsInfo() { } public SmsInfo(long date, int type, String message, String string) { super(); this.date = date; this.type = type; this.message = message; this.address = string; } public long getDate() { return date; } public void setDate(long date) { this.date = date; } public int getType() { return type; } public void setType(int type) { this.type = type; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
相关文章
- 微信小程序使用阿里巴巴的矢量图标iconfont
- 微信小程序 点击显示隐藏 极简Tab标签 点击添加class样式
- 微信小程序 wx:if 与 hidden区别
- 微信小程序 CSS border-radius元素 overflow:hidden失效问题 iPhone ios 苹果兼容问题
- 微信小程序 自定义 tabBar案例 官方案例迁入无效解决方法 非 tab 页显示 tabBar的问题解决 自定义tabBar与原生tabBar以及自写伪tabbar的区别
- IOS APPStore 上传更新应用版本 软件
- Android - NETD解读
- 【Android自定义控件】不用ScrollView实现上下两屏滑动
- Android实现TextView跑马灯效果
- Android进程间通信(一)- Bundle
- Android进程间通信(二)- Messenger
- 微信小程序实现上拉和下拉加载更多
- 微信小程序 scroll-view 完成上拉加载更多
- 微信小程序实现tabs选项卡
- java和vue学生定位打卡小程序人脸识别打卡系统源码网站学生考勤系统
- Java疫苗预约小程序线上疫苗预约系统
- 移动研发提效?小程序容器技术来帮忙!
- 微信小程序(一)自定义导航栏和fixed失效及各机型兼容问题
- 微信小程序(二)学妹问我微信小程序左滑删除怎么实现
- 微信小程序(三)实现类似Vue中的 computed,watch 功能