Android中常用的三种存储方法浅析

Android中常用的三种存储方法浅析

Android中数据存储有5种方式:

【1】使用SharedPreferences存储数据

【2】文件存储数据

【3】SQLite数据库存储数据

【4】使用ContentProvider存储数据

【5】网络存储数据

在这里我只总结了三种我用到过的或即将可能用到的三种存储方法。

一、使用SharedPreferences存储数据

SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置信息比如窗口状态,它的本质是基于XML文件存储key-value键值对数据。SharedPreferences接口本身只能获取数据而不支持存储和修改,需要调用edit()方法获取它所对应的Editor对象实现。

Editor提供如下方法来向SharedPreferences写入数据。

A.SharedPreferences.Editor clear():清空SharedPreferences里所有数据;

B.SharedPreferences.Editor putXXX(String key,xxx value):向SharedPreferences存入指定key对应的数据;

C.SharedPreferences.editor remove(String key):删除SharedPreferences指定key对应的数据项;

D.Boolean commit():当Editor编辑完成后,调用该方法提交修改。

下边介绍对SharedPreferences的简单读写,代码如下:

public class MainActivity extends Activity
{
   SharedPreferences preferences;
   SharedPreferences.Editor editor;
   @Override
   public void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      // 获取只能被本应用程序读、写的SharedPreferences对象
      preferences = getSharedPreferences("crazyit", MODE_PRIVATE);
      editor = preferences.edit();
      Button read = (Button) findViewById(R.id.read);
      Button write = (Button) findViewById(R.id.write);
      read.setOnClickListener(new OnClickListener()
      {
         @Override
         public void onClick(View arg0)
         {

//读取数据,当程序所读取的数据文件不存在的时候,程序返回默认值。
            // 读取字符串数据
            String time = preferences.getString("time", null);
            // 读取int类型的数据
            int randNum = preferences.getInt("random", 0);
            String result = time == null ? "您暂时还未写入数据" : "写入时间为:"
                  + time + "\n上次生成的随机数为:" + randNum;
            // 使用Toast提示信息
            Toast.makeText(MainActivity.this, result
                  , Toast.LENGTH_SHORT).show();
         }
      });
      write.setOnClickListener(new OnClickListener()
      {
         @Override
         public void onClick(View arg0)
         {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 "
                  + "hh:mm:ss");

//写入数据,由于SharedPreferences并不支持Date类型的值,将Date转化字符串后写入。
            // 存入当前时间
            editor.putString("time", sdf.format(new Date()));
            // 存入一个随机数
            editor.putInt("random", (int) (Math.random() * 100));
            // 提交所有存入的数据
            editor.commit();
         }
      });
   }
}

SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。但是SharedPreferences也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。

其存储位置在/data/data/<包名>/shared_prefs目录下。

实现SharedPreferences存储的步骤如下:   

(1)根据Context获取SharedPreferences对象   

(2)利用edit()方法获取Editor对象。   

(3)通过Editor对象存储key-value键值对数据。   

(4)通过commit()方法提交数据。

二、文件存储数据

关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。

文件可用来存放大量数据,如文本、图片、音频等。

默认位置:/data/data/<包>/files/***.***。

Content提供两种方法打开数据文件夹里的文件IO流:

(1)FileInputStream openFileInput(String name);

(2)FileOutputStream openFileOutput(String name,int mode)。

openFileOutput()方法的第二参数用于指定操作模式,有四种模式,分别为:

Context.MODE_PRIVATE:该文件只能被当前程序读写;

Context.MODE_APPEND :以追加方式打开该文件,应用程序可以向该文件中追加内容;

Context.MODE_WORLD_READABLE :该文件的内容可以被其他程序读取;

Context.MODE_WORLD_WRITEABLE :该文件的内容可由其他程序读写。

Activity还提供了getCacheDir()和getFilesDir()方法: getCacheDir()方法用于获取/data/data/<package name>/cache目录 getFilesDir()方法用于获取/data/data/<package name>/files目录

程序如下:

public class MainActivity extends Activity
{
   final String FILE_NAME = "crazyit.bin";
   @Override
   public void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      System.out.println(new StringBuilder("a").append("b").append("c")
            .toString());
      // 获取两个按钮
      Button read = (Button) findViewById(R.id.read);
      Button write = (Button) findViewById(R.id.write);
      // 获取两个文本框
      final EditText edit1 = (EditText) findViewById(R.id.edit1);
      final EditText edit2 = (EditText) findViewById(R.id.edit2);
      // 为write按钮绑定事件监听器
      write.setOnClickListener(new OnClickListener()
      {
         @Override
         public void onClick(View source)
         {
            // 将edit1中的内容写入文件中
            write(edit1.getText().toString());
            edit1.setText("");
         }
      });
      read.setOnClickListener(new OnClickListener()
      {
         @Override
         public void onClick(View v)
         {
            // 读取指定文件中的内容,并显示出来
            edit2.setText(read());
         }
      });
   }
   private String read()
   {
      try
      {
         // 打开文件输入流
         FileInputStream fis = openFileInput(FILE_NAME);
         byte[] buff = new byte[1024];
         int hasRead = 0;
         StringBuilder sb = new StringBuilder("");
         // 读取文件内容
         while ((hasRead = fis.read(buff)) > 0)
         {
            sb.append(new String(buff, 0, hasRead));
         }
         // 关闭文件输入流
         fis.close();
         return sb.toString();
      }
      catch (Exception e)
      {
         e.printStackTrace();
      }
      return null;
   }
   private void write(String content)
   {
      try
      {
         // 以追加模式打开文件输出流
         FileOutputStream fos = openFileOutput(FILE_NAME, MODE_APPEND);
         // 将FileOutputStream包装成PrintStream
         PrintStream ps = new PrintStream(fos);
         // 输出文件内容
         ps.println(content);
         // 关闭文件输出流
         ps.close();
      }
      catch (Exception e)
      {
         e.printStackTrace();
      }
   }
}

三、SQLite数据库存储数据

SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。

特点:

面向资源有限的设备,

没有服务器进程,

所有数据存放在同一文件中跨平台,

可自由复制。

数据库存储在 data/< 项目文件夹 >/databases/ 下。 Android 开发中使用 SQLite 数据库 Activites 可以通过 Content Provider 或者 Service 访问一个数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。

SQLiteOpenHelper 的子类,至少需要实现三个方法:

1 构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。

2 onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。

3 onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。

下面示例代码展示了如何继承 SQLiteOpenHelper 创建数据库:

public class DatabaseHelper extends SQLiteOpenHelper {

DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version)

{

super(context, name, cursorFactory, version);

}

@Override

public void onCreate(SQLiteDatabase db) {

// TODO 创建数据库后,对数据库的操作

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// TODO 更改数据库版本的操作

}

@Override

public void onOpen(SQLiteDatabase db) {

super.onOpen(db);

// TODO 每次成功打开数据库后首先被执行

}

}

在Android SDK的platform-tools目录下提供一个sqlite3.exe文件,是一个简单的SQLite数据库管理工具,类似于MySQL提供的命令行窗口。

时间: 2024-12-10 16:15:29

Android中常用的三种存储方法浅析的相关文章

Jquery中each的三种遍历方法

Jquery中each的三种遍历方法 $.post("urladdr", { "data" : "data" }, function(data) { $.each(data, function(n,value) { });}); 1.选择器+遍历 $('div').each(function (i){ i就是索引值 this 表示获取遍历每一个dom对象 }); 2.选择器+遍历 $('div').each(function (index,dom

请问一下这三种存储方法的区别?原理是什么样子的?哪一种比较好,能不能提供一些意见。谢谢

public String nickName; public Integer userId; public String login(){ //登录之后 方法1. userId = user.getId();nickName = user.getNickName(); 方法2. this.getResRequest().setAttribute("userId", userId); this.getResRequest().setAttribute("nickName&quo

android开发中监听器的三种实现方法(OnClickListener)

Android开发中监听器的实现有三种方法,对于初学者来说,能够很好地理解这三种方法,将能更好地增进自己对android中监听器的理解. 一.什么是监听器. 监听器是一个存在于View类下的接口,一般以On******Llistener命名,实现该接口需要复写相应的on****(View v)方法(如onClick(View v)). 二.监听器的三种实现方法 (以OnClickListener为例) 方法一:在Activity中定义一个内部类继承监听器接口(这里是OnClickListener

Java中Map的三种遍历方法

Map的三种遍历方法: 1. 使用keySet遍历,while循环: 2. 使用entrySet遍历,while循环: 3. 使用for循环遍历. 告诉您们一个小秘密: (下↓面是测试代码,最爱看代码了,啰嗦再多也没用) 一般人我不告诉他哦. import java.util.*; //0 我的Main界面 public class MapTraverse { public static void main(String[] args) { String[] str = {"I love you

Android中常用的五种数据存储方式

第一种: 使用SharedPreferences存储数据 适用范围: 保存少量的数据,且这些数据的格式非常简单:字符串型.基本类型的值.比如应用程序的各种配置信息(如是否打开音效.是否使用震动效果.小游戏的玩家积分等),解锁口 令密码等 核心原理: 保存基于XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息.通过DDMS的File Explorer面板,展开文件浏览树,很明显SharedPreferences数据总是存储在/data/data/<package name

Android中定时执行任务的3种实现方法

在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,java的实现方式)二.采用Handler的postDelayed(Runnable, long)方法(最简单的android实现)三.采用Handler与timer及TimerTask结合的方法(比较多的任务时建议使用) 下面逐一介绍: 一.采用Handle与线程的sleep(long)方法 Handler主要用来处理接受到的消息.这只是最主要的方法,当然Handler里

【转】Android中定时器的3种实现方法

原文网址:http://www.android-study.com/pingtaikaifa/508.html 在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与线程的sleep(long)方法二.采用Handler的postDelayed(Runnable, long)方法三.采用Handler与timer及TimerTask结合的方法 下面逐一介绍: 一.采用Handle与线程的sleep(long)方法 Handler主要用来处理接受到的消息.这只是最主要的方

Android中定时器的3种实现方法

原文:http://blog.csdn.net/wulianghuan/article/details/8507221 在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与线程的sleep(long)方法二.采用Handler的postDelayed(Runnable, long)方法三.采用Handler与timer及TimerTask结合的方法 下面逐一介绍: 一.采用Handle与线程的sleep(long)方法 Handler主要用来处理接受到的消息.这只是最

MySQL常用的三种备份方法

mysql按照备份恢复方式分为逻辑备份和物理备份.逻辑备份是备份sql语句,在恢复的时候执行备份的sql语句实现数据库数据的重现,物理备份就是备份数据文件了,比较形象点就是cp下数据文件,但真正备份的时候自然不是的cp这么简单.这2种备份各有优劣,一般来说,物理备份恢复速度比较快,占用空间比较大,逻辑备份速度比较慢,占用空间比较小下面介绍以下3种常用的备案方法一.mysqldump工具备份mysqldump由于是mysql自带的备份工具,所以也是最常用的mysql数据库的备份工具.支持基于Inn