通过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 ...
随机推荐
- JMeter正则表达式提取器说明
Apply to:应用范围 要检查的响应字段:样本数据源. 引用名称:其他地方引用时的变量名称,引用方法:${引用名称} 正则表达式:数据提取器,如上图的 "sysNo":&quo ...
- Maven基础配置
重要网址 Maven主页:http://maven.apache.org/ Maven central repository:http://search.maven.org/ Maven aliyun ...
- java集合转换成json时问题和解决方法
json+hibernate死循环问题的一点见解,有需要的朋友可以参考下. [问题]如题所示,在我们使用hibernate框架而又需要将对象转化为json的时候,如果配置了双向的关联关系,就会出现这个 ...
- Node.js核心模块_全局变量、util学习
全局对象 javascript的全局对象是window,他及其所有属性都可以在程序的任何地方访问.即全局变量. 而在node中全局对象是global,所有全局变量都是global对象的属性,包括其本身 ...
- uva 103 经典DAG变形
https://vjudge.net/problem/UVA-103 也是一个经典的DAG模型,因为书上的翻译和原文不照导致WA两发= = 对于同一维度的两个箱子A,B,A可以嵌套在B中的一个充分条件 ...
- Mybatis 别名机制,自动扫描 数据的增删改
mybatis别名机制: 在mybatis.xml文件中的<configuration></configuration>标签中间加入属性<typeAliases>& ...
- html5 video 监听播放结束. 最好获取html标签而不是id。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 28 python 并发编程之多进程
一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.P ...
- Eclipse插件开发_学习_02_GEF入门实例
一.前言 这一节,我们将会创建一个GEF入门实例 二.新建RCP项目 1. New 一个 Plug-in Project 2.输入项目名 项目名:com.ray.gef.helloworld 3.Co ...
- Django上传文件的两种方式
基于form表单上传文件 HTML <h3>基于form表单的上传文件</h3> <form action="" method="post& ...