zoukankan      html  css  js  c++  java
  • 通过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();
    
        }
    }
  • 相关阅读:
    hdu4612 无向图中随意加入一条边后使桥的数量最少 / 无向图缩点+求树的直径
    Python 之 安装模块的多种方法
    开源项目Universal Image Loader for Android 说明文档 (1) 简单介绍
    IDEA下使用Jetty进行Debug模式调试
    离线安装Cloudera Manager5.3.4与CDH5.3.4(一)
    让你提前认识软件开发(38):完毕第一个新需求
    Windows App开发之经常使用控件与应用栏
    【剑指Offer学习】【面试题58:二叉树的下一个结点】
    【Win】编写简单的bat文件
    【Linux】MySQL解压版安装及允许远程访问
  • 原文地址:https://www.cnblogs.com/linfenghp/p/5393832.html
Copyright © 2011-2022 走看看