我们在实际开发中,有的时候需要储存或者备份比较复杂的数据。这些数据的特点是,内容多、结构大,比如短信备份等。我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效率。如果学过JavaWeb的朋友,首先可能想到的是数据库。当然了数据库是一个方案,那么是否还有其他的解决方案呢?今天我们在讲下Android开发笔记之Android中数据的存储方式(一) 提到的除了SharedPreferences和Files(文本文件)以外的其他几种数据储存方式:xml文件、SQLite数据和Network。
1.3 例子
3. xml:
小案例:下面我们有这样一个小案例:就是短信备份。我们先分析一条短信的结构(如下图)。
我们看到一条短信包括:短信内容、短信发送或接受的时间、对方号码、类型type(1为接受,2为发送)四种属性(字段)。试着用之前讲过SharedPreferences和Files(文本文件)分析怎么备份?由于SharedPreferences保存的数据只是简单的键值对形式,相对于短信这种结构复杂一些的,他显然是没法去储存的。Files倒是可以做到,定义一个结构格式去保存,但在读写的时候就变得会非常麻烦没有效率。
• XML备份原理:目前手机助手短信备份方式虽然多种,但XML格式仍然是比较经典的一种。把短信的全部按照一定的标签格式,写到XML文件中去,再把其保存到本地。从其原理可以看到我首先的就是要生成XML文件。
• 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"tools:context="${relativePackage}.${activityClass}" ><Button android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="生成XML"/></RelativeLayout>
• java代码:
• 如何获取系统所保存的短信,为了简介展示,这里就不用内容提供者了,我这里用for循环直接虚拟一个组短信。我们知道手机里的短信少则几条多则上千条,每条短信有四个独立属性,那么我们可以给每条短信封装成一个javabean对象,每个对象有四个常规属性。
•Sms.java(javabean对象)
package com.bokeyuan.createxml.domain;/*** 短信内容属性的JavaBean* @author **/public class Sms {private String address;private String date;private String type;private String body;public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getDate() {return date;}public void setDate(String date) {this.date = date;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getBody() {return body;}public void setBody(String body) {this.body = body;}public Sms(String address, String date, String type, String body) {super();this.address = address;this.date = date;this.type = type;this.body = body;}@Overridepublic String toString() {return "Sms [address=" + address + ", date=" + date + ", type=" + type+ ", body=" + body + "]";}}
• MainActivity.java
package com.bokeyuan.createxml;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import com.bokeyuan.createxml.domain.Sms;import android.app.Activity;import android.os.Bundle;import android.view.View;public class MainActivity extends Activity {private List<Sms> smslist;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);smslist = new ArrayList<Sms>();//假设10条短信for (int i = 0; i < 10; i++) {Sms sms = new Sms("110" +i+i, System.currentTimeMillis() + "", "1", "你好,同志" +i);smslist.add(sms);}}public void onClick(View v){//StringBuffer sb = new StringBuffer();//添加属性到sb中sb.append("<?xml version=/"1.0/" encoding=/"utf-8/"?>");sb.append("<messages>");for (Sms sms : smslist) { sb.append("<message>");sb.append("<address>");sb.append(sms.getAddress());sb.append("</address>");sb.append("<date>");sb.append(sms.getDate());sb.append("</date>");sb.append("<type>");sb.append(sms.getType());sb.append("</type>");sb.append("<body>");sb.append(sms.getBody());sb.append("</body>");sb.append("</message>");}sb.append("</messages>");//写入外出储存路径File file = new File("strorage/sdcard/sms.xml");try {FileOutputStream fos = new FileOutputStream(file);fos.write(sb.toString().getBytes());fos.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
•权限:android.permission.WRITE_EXTERNAL_STORAGE
以上给大家介绍了Android开发笔记之Android中数据的存储方式(二)的相关知识,希望大家喜欢。
新闻热点
疑难解答
图片精选