Android中生成xml文件
Android中xml的读写
通常把数据封装到对象中,然后通过对象俩操作数据。包名不能使用Android或Java的关键字。
当一个应用被删除时,该应用在内部存储空间内的所有数据都会被删除,而应用在外部存储空间的数据不会被删除。备份文件一般都放在外部存储空间中。
对于xml文件的校验,可以把xml文件放到浏览器中去解析,如果能够正常解析说明xml文件是正确的。
短信备份案例:
activity_main.xml
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.test.backsms.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="back"
android:text="备份短信"/>
</RelativeLayout>
通过bean封装对象
packagecom.test.backsms.domain;
publicclassMessageBean{
//短信的内容
privateStringbody;
//短信接收日期
privateStringdate;
//短信发送的目的地
privateStringaddress;
//短信的类型:接收或者是发送
privateStringtype;
publicStringgetBody(){
returnbody;
}
publicvoidsetBody(Stringbody){
this.body=body;
}
publicStringgetDate(){
returndate;
}
publicvoidsetDate(Stringdate){
this.date=date;
}
publicStringgetAddress(){
returnaddress;
}
publicvoidsetAddress(Stringaddress){
this.address=address;
}
publicStringgetType(){
returntype;
}
publicvoidsetType(Stringtype){
this.type=type;
}
publicMessageBean(Stringbody,Stringdate,Stringaddress,Stringtype){
super();
this.body=body;
this.date=date;
this.address=address;
this.type=type;
}
}
packagecom.test.backsms;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.List;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.view.View;
importcom.test.backsms.domain.MessageBean;
publicclassMainActivityextendsActivity{
List<MessageBean>smsList;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//模拟短信
//创建list对象存储短信
smsList=newArrayList<MessageBean>();//非常重要,不能忘记
for(inti=0;i<10;i++){
MessageBeanmb=newMessageBean("adsfasf",i+"","13985666565","1");
System.out.println(mb.getAddress()+mb.getBody()+mb.getDate()+mb.getType());
smsList.add(mb);
}
}
//备份短信
publicvoidback(Viewv){
//现在内存中把数据格式拼接出来,然后再写出去
//通过StringBuffer对象拼接
StringBuffersb=newStringBuffer();
//添加xml声明
sb.append("<?xmlversion='1.0'encoding='utf-8'standalone='yes'?>");
//添加根节点
sb.append("<message>");
//添加子节点
for(MessageBeansms:smsList){
sb.append("<sms>");
//添加内容节点
sb.append("<body>");
sb.append(sms.getBody());
sb.append("</body>");
sb.append("<date>");
sb.append(sms.getDate());
sb.append("</date>");
sb.append("<address>");
sb.append(sms.getAddress());
sb.append("</address>");
sb.append("<type>");
sb.append(sms.getType());
sb.append("</type>");
sb.append("</sms>");
}
sb.append("</message>");
Stringpath="sdcard/sms.xml";
Filefile=newFile(path);
try{
FileOutputStreamfos=newFileOutputStream(file);
try{
fos.write(sb.toString().getBytes());
//关流
fos.close();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}catch(FileNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
添加写权限
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
在Android中,提供了xml序列化器来生成xml文件。在Android中默认的编码格式为utf-8。xml序列化器会过滤掉没有用到的不完整的标签
package com.test.backsms;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 org.xmlpull.v1.XmlSerializer;
import android.app.Activity;
import android.os.Bundle;
import android.util.Xml;
import android.view.View;
import com.test.backsms.domain.MessageBean;
public class MainActivity extends Activity {
List<MessageBean> smsList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//模拟短信
//创建list对象存储短信
smsList = new ArrayList<MessageBean>();//非常重要,不能忘记
for(int i=0;i<10;i++){
MessageBean mb = new MessageBean("adsfasf", i+"", "13985666565", "1");
System.out.println(mb.getAddress()+mb.getBody()+mb.getDate()+mb.getType());
smsList.add(mb);
}
}
//备份短信
public void back(View v) {
//使用序列化器生成xml对象
//1.拿到xml序列化对象
XmlSerializer xs = Xml.newSerializer();
//2.初始化 文件名和路径
String path = "sdcard/sms.xml";
String encoding ="utf-8";
File file = new File(path);
FileOutputStream fos;
try {
fos = new FileOutputStream(file);
try {
//指定用什么编码生成xml文件
xs.setOutput(fos, encoding);
//3.开始生成xml
//指定xml文件申明中encoding的值,true表示yes,文件独立
xs.startDocument(encoding, true);
//生成文件的根节点xs.startTag(namespace, name);
xs.startTag(null, "message");
//生成xml文件的节点
for(MessageBean sms:smsList){
xs.startTag(null, "sms");
xs.startTag(null, "body");
xs.text(sms.getBody());
xs.endTag(null, "body");
xs.startTag(null, "date");
xs.text(sms.getDate());
xs.endTag(null, "date");
xs.startTag(null, "address");
xs.text(sms.getAddress());
xs.endTag(null, "address");
xs.startTag(null, "type");
xs.text(sms.getType());
xs.endTag(null, "type");
xs.endTag(null, "sms");
}
//关闭根节点
xs.endTag(null, "message");
//告诉序列化器xml文件生成结束。
xs.endDocument();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
更多相关文章
- android鼠标滚轮bug
- android点滴2
- [应用代码] android源码之多线程断点续传下载
- Android(安卓)多个 Activity 调用 跳转
- Android(安卓)Android.mk文件各种模版参考
- Android心得3.4--用Pull解析器解析xml文件内容.doc
- android JNI C代码对sdcard中文件的操作
- android远程控制(一)----发现驱动文件里代码含义
- Mtk Android(安卓)app 默认激活设备管理器