[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; 
    } 
     
}

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/5500.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论