通过XmlSerializer接口来生成xml文件
xml文件我们可以用来保存一些数据。例如用来备份短信。这个例子中,我们就用XmlSerializer接口来实现一个备份短信的程序。当然了,为了程序简单化,这个程序我们并不是真的去备份短信。我们通过一个Message.java文件来作为javabean使用。用他来虚拟一个短信类。然后我们来备份虚拟出来的内容。
备份后,会在对应的目录下生成一个xml文件。我们可以用浏览器来打开,解析出xml来看。
先看程序运行效果。

然后我们直接看代码,对了,清单文件我就不弄上来了。清单文件没什么,因为要向sd卡写文件嘛,所以要添加个向sd卡写入的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
下面看我生成的xml文件,运行程序后,便会在sd卡的根目录下生成info.xml的文件。下面是我用浏览器打开后解析的效果。

下面看代码
首先是布局文件
<RelativeLayout xmlns: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.example.savexml.MainActivity" > <Button
android:id="@+id/bt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello_world" /> </RelativeLayout>
然后是java文件(两个类)
首先是Message.java (这个类的作用主要是用来做短信类而已,作为javabean的作用)
package com.example.savexml;
public class Message {
// 定义短信内容
private String body;
// 定义短信日期
private String date;
// 定义发件人号码
private String address;
// 定义收发类型
private String type;
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Message(String body, String date, String address, String type) {
super();
this.body = body;
this.date = date;
this.address = address;
this.type = type;
}
}
然后是MainActivity
package com.example.savexml; import java.io.File;
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.os.Environment;
import android.util.Log;
import android.util.Xml;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast; public class MainActivity extends Activity { List<Message> smsList;
private Button btButton; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 存放短信的集合
smsList = new ArrayList<Message>();
// 虚拟出20条短信
for (int i = 0; i <= 20; i++) {
Message msm = new Message("短信内容" + i, System.currentTimeMillis()
+ "", "10086", "1");
smsList.add(msm);
}
btButton = (Button) findViewById(R.id.bt);
btButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
backup();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}); } private void backup() throws IOException {
// 拿到xml序列化器
XmlSerializer xs = Xml.newSerializer();
// 包装外部存储路径
File file = new File(Environment.getExternalStorageDirectory(),
"info.xml");
FileOutputStream fos = null;
try {
// 用输出流输出info.xml
fos = new FileOutputStream(file);
// 指定用utf-8编码生成文件
xs.setOutput(fos, "UTF_8");
// 生成xml表头,两个参数表示表头属性
xs.startDocument("UTF-8", true);
// 生成根节点
/*
* 其实拼接的过程有点像写html文件, 无非就是一对标签,一对标签的写而已。
* 从代码可以看出,xs.startTag(),表示标签开始,endTag()表示标签结束。
* 第二个参数表示节点名称。
*/
xs.startTag(null, "message");
for (Message 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"); // 表示文档生成结束
xs.endDocument(); } catch (Exception e) {
e.printStackTrace();
} finally {
if (fos != null) {
fos.close();
Log.i("Back", "33333");
}
}
Toast.makeText(this, "备份完成", 0).show(); }
}
通过XmlSerializer接口来生成xml文件的更多相关文章
- Mybatis自动生成xml文件、dao接口、实体类
Mybatis可以通过逆向工程,实现自动生成xml文件.dao接口.实体类 以下使用的是Intellij Idea进行自动生成 一.首先,要在pom.xml中导入插件,在<build>中加 ...
- Android 解析XML文件和生成XML文件
解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...
- Android 使用xml序列化器生成xml文件
在<Android 生成xml文件>一文中使用流的形式写入xml格式文件,但是存在一定的问题,那就是在短信内容中不能出现<>之类的括号,本文使用xml序列化器来解决 xml序列 ...
- 使用XML序列化器生成XML文件和利用pull解析XML文件
首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...
- 生成XML文件,通过实体生成XML文件
实体 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Xm ...
- 使用XMl序列化器生成xml文件
生成XML文件 创建几个虚拟的短信对象,存在list中 备份数据通常都是备份至sd卡 使用StringBuffer拼接字符串 把整个xml文件所有节点append到sb对象里 sb.append(&q ...
- 使用Pull解析器生成XML文件和读取xml文件
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...
- asp.net 生成xml文件 与 asp生成xml文件
一.asp.net 生成xml文件 webservice方式,调用接口: public XmlDocument List() { XmlDocument doc = new XmlDocument() ...
- Android 生成xml文件及xml的解析
1.生成xml文件的两种方式 (1)采用拼接的方式生成xml(不推荐使用) (2)利用XmlSerializer类生成xml文件 package com.example.lucky.test52xml ...
随机推荐
- Java编程思想 Random(47)
Random类包含两个构造方法,下面依次进行介绍:1. public Random()该构造方法使用一个和当前系统时间对应的相对时间有关的数字作为种子数,然后使用这个种子数构造Random对象.2. ...
- js+css实现简单下拉菜单
<head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312&qu ...
- 从AD域获取用户AD信息
public static Dictionary<string, string> SearchADInfo(string adName) { string strTemp = " ...
- mongodb数据文件结构——record是内嵌BSON的双向链表,多个record或索引组成extent
数据文件结构 Extent 在每一个数据文件内,MongoDB把所存储的BSON文档的数据和B树索引组织到逻辑容器“Extent”里面.如下图所示(my-db.1和my-db.2 是数据库的两个数据文 ...
- JavaWeb学习总结(二) Servlet
本文目录 一.Servlet概述 二.Servlet接口 三.GenericServlet 四.HttpServlet 五.Servlet细节 六.ServletContext 回到顶部 一.Serv ...
- mac下用brew安装mongodb
分享到:QQ空间新浪微博腾讯微博人人网微信 mac 下安装mongoDB一般俩种方法. (1)下载源码,解压,编译,配置,启动 比较艰难的一种模式. (2)brew install mongodb , ...
- php mysql 查询
抓取结果集对象中数据并且转换数组 $row = mysqli_fetch_assoc(结果集对象); 从结果集对象中抓取一行记录->转换关联数组 $row = mysqli_fetch_row( ...
- mysqldumpslow使用说明。
mysql慢查询日志分析工具mysqldumpslow. 常用的方法: mysqldumpslow -s c -t 10 /var/run/mysqld/mysqld-slow.log # 取出使用最 ...
- JQuery 提供了两种方式来阻止事件冒泡。
JQuery 提供了两种方式来阻止事件冒泡. 方式一:event.stopPropagation(); $("#div1").mousedown(function(event){ ...
- Cash Machine(多重背包二进制转换)
个人心得:多重背包,自己根据转换方程写总是TLE,后面去网上看了二进制转换,不太理解: 后面仔细想了下,用自己的思想理解下把,就是将对应number,cash总和用二进制拆分, 然后全部装入到一个数组 ...