你的位置:首页 > 操作系统

[操作系统]Android笔记——Android中数据的存储方式(二)


 

 

 

  我们在实际开发中,有的时候需要储存或者备份比较复杂的数据。这些数据的特点是,内容多、结构大,比如短信备份等。我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效率。如果学过JavaWeb的朋友,首先可能想到的是数据库。当然了数据库是一个方案,那么是否还有其他的解决方案呢?今天我们在讲下Android笔记——Android中数据的存储方式(一) 提到的除了SharedPreferencesFiles(文本文件)以外的其他几种数据储存方式:SQLite数据Network

1.3  例子

  3.  xml:

  小案例:下面我们有这样一个小案例:就是短信备份。我们先分析一条短信的结构(如下图)。

  我们看到一条短信包括:短信内容短信发送或接受的时间对方号码类型type(1为接受,2为发送)四种属性(字段)。试着用之前讲过SharedPreferences和Files(文本文件)分析怎么备份?由于SharedPreferences保存的数据只是简单的键值对形式,相对于短信这种结构复杂一些的,他显然是没法去储存的。Files倒是可以做到,定义一个结构格式去保存,但在读写的时候就变得会非常麻烦没有效率。

  •   
  •   

    首先介绍下它保存信息的格式:头文件、根节点(包括开始节点和结束节点)、子节点以及的他的属性等。

 

  •   布局文件:
    •   
      <RelativeLayout ="http://schemas.android.com/apk/res/android"  ="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="生成/></RelativeLayout>

      View Code

       

  •   java代码:
    •    如何获取系统所保存的短信,为了简介展示,这里就不用内容提供者了,我这里用for循环直接虚拟一个组短信。我们知道手机里的短信少则几条多则上千条,每条短信有四个独立属性,那么我们可以给每条短信封装成一个javabean对象,每个对象有四个常规属性。
    • Sms.java(javabean对象)
      package com.bokeyuan.create/** * 短信内容属性的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;  }    @Override  public String toString() {    return "Sms [address=" + address + ", date=" + date + ", type=" + type        + ", body=" + body + "]";  }  }

    •  MainActivity.java
      package com.bokeyuan.createimport java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import com.bokeyuan.createimport android.app.Activity;import android.os.Bundle;import android.view.View;public class MainActivity extends Activity {  private List<Sms> smslist;  @Override  protected 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("<?);    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.);    try {      FileOutputStream fos = new FileOutputStream(file);      fos.write(sb.toString().getBytes());      fos.close();    } catch (Exception e) {      // TODO Auto-generated catch block      e.printStackTrace();    }  }}

    • 权限:android.permission.WRITE_EXTERNAL_STORAGE

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

参考资料:

Android应用开发基础之数据存储和界面展现(三)