zoukankan      html  css  js  c++  java
  • [android] xml文件的序列化

    生成xml文件,模拟备份短信,创建短信的业务bean,创建一个domain的包放业务bean,这个业务bean里面,定义成员属性,生成get set方法,生成有参和无参的构造方法。

    生成随机数,实例化Random,调用Random对象的nextInt(n)方法,生成0n之间的随机数,获取当前系统的时间戳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;
        }
        
    }
  • 相关阅读:
    Microsoft Visual Studio 2005中使用水晶报表
    net的辅助工具列表
    基于.net开发平台项目案例集锦
    一个蛮不错的图形绘制控件 dotnetCHARTING
    统计图控件dotnetCharting和ZedGraph比较
    c#获取真实IP和代理IP
    虚拟主机比较安全设置
    正则表达式 大杂烩
    【转载】说说大型高并发高负载网站的系统架构
    使用.NET实现断点续传
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5240298.html
Copyright © 2011-2022 走看看