Android - XML序列化

时间:2021-06-05 20:32:32

1、xml文件的序列化:采用XmlSerializer来实现XML文件的序列化。相比传统方式,更高效安全

MainActivity.java

 package com.example.test_buildxmlfile;

 import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random; import org.xmlpull.v1.XmlSerializer; import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.util.Xml;
import android.view.View;
import android.widget.Toast; import com.example.test_getxmlfile.R;
import com.test.MsgInfo.MsgInfo; /**
* @author daomul
* 主入口:xml文件的序列化
*/
public class MainActivity extends Activity { private List<MsgInfo> msgList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); msgList = new ArrayList<MsgInfo>();
Random random= new Random(); //随机的 (1:发送 2 :接收)
long number = 1340000001; //手机地址 //连续生成10条默认短信
for (int i = 0; i < 10; i++) {
msgList.add(new MsgInfo(System.currentTimeMillis(), random.nextInt(2),
"text MSg"+i,Long.toString(number+i),i ));
}
} /**
* 短信信息备份
* @param view 点击事件触发
*/
public void MsgSave(View view){ try {
//XML序列化
XmlSerializer serializer= Xml.newSerializer(); File file=new File(Environment.getExternalStorageDirectory(),"test.xml");
FileOutputStream os= new FileOutputStream(file); serializer.setOutput(os, "utf-8");//os 是导出的文件位置 encoding 指代utf-8
serializer.startDocument("utf-8", true); serializer.startTag(null, "msgs");
for (MsgInfo msg:msgList) {
serializer.startTag(null, "msg");
serializer.attribute(null, "msg", msg.getId()+"");//添加ID属性 serializer.startTag(null, "body");
serializer.text(msg.getBody());
serializer.endTag(null, "body"); serializer.startTag(null, "address");
serializer.text(msg.getAddress());
serializer.endTag(null, "address"); serializer.startTag(null, "type");
serializer.text(msg.getType()+"");
serializer.endTag(null, "type"); serializer.startTag(null, "date");
serializer.text(msg.getDate()+"");
serializer.endTag(null, "date"); serializer.endTag(null, "msg");
}
serializer.endTag(null, "msgs"); serializer.endDocument(); os.close();
Toast.makeText(this, "XML序列化成功", 0).show(); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(this, "XML序列化失败", 0).show();
}
}
}     

MsgInfo.java

 package com.test.MsgInfo;

 /**
* @author daomul
* 短信信息
*/ public class MsgInfo { private long date;
private int type;
private String body;
private String address;
private int id; //无参构造方法
public MsgInfo() { } //有参构造方法 Generate Constructor use fields...
public MsgInfo(long date, int type, String body, String address,int id) {
super();
this.date = date;
this.type = type;
this.body = body;
this.address = address;
this.id = id;
} //setter and getter
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} 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 getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
} }

注: 写文件到SD卡中需要 user 权限