android xml文件的序列化--XmlSerializer简单用法

在开发过程中呢,会有生成一个xml文件的需要,那么下面,我们以备份短信为例,看一下如何生成一份xml文件。假如说我们要备份生成的短信文件是这样子的:

这里写图片描述

第一种方法:用StringBuffer拼接字符串生成一份xml文件。

    /**
     * 备份短信(往xml里写数据)。普通方法,用StringBuffer
     */
    private void writeXml1() {
        // TODO Auto-generated method stub
        StringBuffer xmlStr = new StringBuffer();
        xmlStr.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        xmlStr.append("<smss>");

        //MsmInfo.java是短信对象的基本信息类
        //msmList是短信集合(List)
        for (MsmInfo info : msmList) {
            xmlStr.append("<sms>");
            // type;// 0发送,1接收
            // date;// 短信时间
            // address;// 收件人or发件人
            // content;// 短信内容
            xmlStr.append("<type>");
            xmlStr.append(info.getType());
            xmlStr.append("</type>");

            xmlStr.append("<date>");
            xmlStr.append(info.getDate());
            xmlStr.append("</date>");

            xmlStr.append("<address>");
            xmlStr.append(info.getAddress());
            xmlStr.append("</address>");

            xmlStr.append("<content>");
            xmlStr.append(info.getContent());
            xmlStr.append("</content>");

            xmlStr.append("</sms>");

        }
        xmlStr.append("</smss>");
        try {
            File file = new File(Environment.getExternalStorageDirectory(),
                    "msmBackup.xml");
            FileOutputStream outputStream = new FileOutputStream(file);
            outputStream.write(xmlStr.toString().getBytes());
            outputStream.close();
            Toast.makeText(getApplicationContext(), "备份成功", Toast.LENGTH_SHORT)
                    .show();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            Toast.makeText(getApplicationContext(), "备份失败", Toast.LENGTH_SHORT)
                    .show();
            e.printStackTrace();
        }

    }

这样,我们就可以生成一份xml文件了。
可是我们会发现,这样的方法虽然简单易懂,但实际编写起来很繁琐,并且特别容易出错,再者,如果我的短信内容里有特殊符号呢,估计事情就不会往预想的方向发展了。
那么,该怎么办呢?答案就是它:XmlSerializer。我们可以用XmlSerializer格式化生成文档,呐,下面我们来看具体用法:

第二种方法:XmlSerializer

    /**
     * 备份短信(往xml里写数据)。用XmlSerializer格式化生成文档
     */
    private void writeXml2() {
        // TODO Auto-generated method stub
        XmlSerializer serializer = Xml.newSerializer();// 新建一个Xml Serializer
        try {
            File file = new File(Environment.getExternalStorageDirectory(),
                    "msmBackup2.xml");// 文件路径
            FileOutputStream outputStream = new FileOutputStream(file);
            serializer.setOutput(outputStream, "utf-8");// 用给定的编码设置二进制输出流。
            serializer.startDocument("utf-8", true);
            serializer.startTag(null, "msms");// 设置开始标签

            for (MsmInfo info : msmList) {// 遍历短信集合
                serializer.startTag(null, "msm");// 设置开始标签
                serializer.attribute(null, "id", info.getId() + "");// 设置标签属性id

                // type;// 0发送,1接收
                // date;// 短信时间
                // address;// 收件人or发件人
                // content;// 短信内容
                serializer.startTag(null, "type");// 设置开始标签
                serializer.text(info.getType() + "");
                serializer.endTag(null, "type");// 相对应的结束标签

                serializer.startTag(null, "date");
                serializer.text(info.getDate() + "");
                serializer.endTag(null, "date");

                serializer.startTag(null, "address");
                serializer.text(info.getAddress());
                serializer.endTag(null, "address");

                serializer.startTag(null, "content");
                serializer.text(info.getContent());
                serializer.endTag(null, "content");

                serializer.endTag(null, "msm");// 设置结束标签,与其开始标签相对应
            }
            serializer.endTag(null, "msms");// 设置结束标签,与其开始标签相对应
            serializer.endDocument();// 表示文档结束
            outputStream.close();// 关闭输出流
            Toast.makeText(getApplicationContext(), "备份成功", Toast.LENGTH_SHORT)
                    .show();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            Toast.makeText(getApplicationContext(), "备份失败", Toast.LENGTH_SHORT)
                    .show();
            e.printStackTrace();
        }
    }

下面是MsmInfo.java

public class MsmInfo {

    private int id;
    private int type;// 0发送,1接收
    private long date;// 短信时间
    private String address;// 收件人or发件人
    private String content;// 短信内容

    public MsmInfo() {

    }

    public MsmInfo(int id, int type, long date, String address, String content) {
        this.id = id;
        this.type = type;
        this.date = date;
        this.address = address;
        this.content = content;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public long getDate() {
        return date;
    }

    public void setDate(long date) {
        this.date = date;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    @Override
    public String toString() {
        return "[id=" + id + ", type=" + type + ", 时间=" + date + ", 电话="
                + address + ", 短信内容=" + content + "]";
    }

}

ok,完工了,是不是发现XmlSerializer更好用一些呢。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值