XmlSerializer不能保存emoji表情

XmlSerializer不能保存emoji表情

本人在Android中学习到备份短信时,需求是这样的,需要将短信备份到xml文件中.踩到一个坑,当XmlSerializer遇到emoji表情时,就会出错,保存xml文件就会失败.最后谷歌找了个别人写的KXmlSerializer(),完美解决这个问题.本人代码如下:

/**
     * 备份短信
     * 
     * @param context
     * @param allSms
     * @return
     */
    public static void backupSms(Context mContext, final List<Sms> allSms,
            final Handler handler) {

        new Thread(new Runnable() {

            @Override
            public void run() {

                FileOutputStream fileOutputStream = null;
                File file = null;
                try {
                    // 1.准备文件输出流
                    file = new File(Environment.getExternalStorageDirectory().getPath()
                            + "/sms.xml");
                    if(!file.exists()){
                        file.createNewFile();
                    }

                    fileOutputStream = new FileOutputStream(file);

                    // 2.得到XmlSerializer对象
                    //Android下,如果短信有emoji表情,Xml.newSerializer()则会备份失败   
                    //去百度找了份KXmlSerializer代码,这个可以   不会出错
//                  XmlSerializer xmlSerializer = Xml.newSerializer();    
                    XmlSerializer xmlSerializer = new KXmlSerializer();

                    // 2.1设置XmlSerializer的一些参数,比如:设置xml写入到哪个文件中
                    // os:xml文件写入流 encoding:流的编码
                    xmlSerializer.setOutput(fileOutputStream, "utf-8");

                    // 3.序列化一个xml的声明头
                    // encoding:xml文件的编码 standalone:是否独立
                    xmlSerializer.startDocument("utf-8", true);

                    // 4.序列化一个根节点的开始节点
                    // namespace:命名空间 name: 标签的名称
                    xmlSerializer.startTag(null, "Smss");

                    // 5.循环遍历list集合序列化一条条短信

                    for (Sms sms : allSms) {
                        xmlSerializer.startTag(null, "Sms");

                        xmlSerializer.startTag(null, "address");
                        // 写一个标签的内容
                        xmlSerializer.text(sms.getAddress());
                        xmlSerializer.endTag(null, "address");

                        xmlSerializer.startTag(null, "date");
                        xmlSerializer.text(sms.getDate());
                        xmlSerializer.endTag(null, "date");

                        xmlSerializer.startTag(null, "read");
                        xmlSerializer.text(sms.getRead() + "");
                        xmlSerializer.endTag(null, "read");

                        xmlSerializer.startTag(null, "body");
                        xmlSerializer.text(sms.getBody());
                        xmlSerializer.endTag(null, "body");

                        if (sms.getPerson() != null) {
                            xmlSerializer.startTag(null, "person");
                            xmlSerializer.text(sms.getPerson());
                            xmlSerializer.endTag(null, "person");
                        }

                        xmlSerializer.endTag(null, "Sms");
                    }

                    // 6.序列化一个根节点的结束节点
                    xmlSerializer.endTag(null, "Smss");
                    // 7.将xml写入到文件中,完成xml的序列化
                    xmlSerializer.endDocument();

                    // 将需要返回的数据封装到handler中
                    Message message = new Message();
                    message.obj = true;
                    handler.sendMessage(message);

                } catch (Exception e) {
                    // 将需要返回的数据封装到handler中
                    Message message = new Message();
                    message.obj = false;
                    handler.sendMessage(message);
                    e.printStackTrace();
                } finally {
                    if (fileOutputStream != null) {
                        try {
                            fileOutputStream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }


            }
        }).start();

    }

附demo下载地址:http://download.csdn.net/detail/xfhy_/9746169

demo里有KXmlSerializer完整代码,由于代码太长,就不在这里发了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值