Android五种数据存储方式

来源:互联网 发布:雷洋事件知乎 编辑:程序博客网 时间:2024/05/22 03:05
1、分类

数据存储在开发中是使用最频繁的,Android平台中实现数据存储主要有5种方式,分别是:

  1. SQLite: SQLite是一个轻量级嵌入式数据库,支持基本SQL语法,是常被采用的一种数据存储方式。Android为此数据库提供了一个名为SQLiteDatabase的类,封装了一些操作数据库的API。
  2. SharedPreferenceSharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能读取数据而不支持写入数据,存储修改是通过Editor对象实现。常用于存储较简单的参数设置。
  3. File: 即常说的文件(I/O)存储方法,常用语存储大数量的数据,但是缺点是更新数据将是一件困难的事情。
  4. ContentProvider: Android系统中能实现所有应用程序共享的一种数据存储方式,由于数据通常在各应用间的是互相私密的,所以此存储方式较少使用,但是其又是必不可少的一种存储方式。例如音频,视频,图片和通讯录,一般都可以采用此种方式进行存储。每个Content Provider都会对外提供一个公共的URI(包装成Uri对象),如果应用程序有数据需要共享时,就需要使用Content Provider为这些数据定义一个URI,然后其他的应用程序就通过Content Provider传入这个URI来对数据进行操作。
  5. 网络存储数据:通过网络获取数据和写入数据到网络存储空间

 小结:1~3只能用于工程内部

 2、拓展

2.1 SQLite主要通过两个类实现其功能

  1. SQLiteOpenHelper:数据库的帮助类,是一个抽象类,定义有两个抽象方法,用于进行数据库和表的创建(onCreate(SQLiteDatabase db)),以及版本的更新(onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion))
  2. SQLiteDatabase:这个类里封装了对表的具体的操作的方法,比如增删改查(crud)的方法。

2.2 获取SharedPreferences对象的方式:

  1. 调用Context对象的getSharedPreferences()方法,可指定file name和MODE
  2. 调用Activity对象的getPreferences()方法,只需指定MODE
  3. 每个应用有一个默认的偏好文件preferences.xml,使用PreferceManager().getDefaultSharedPreferences()来获取

  前两种方式的区别:

  • 调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他组件共享.
  • 调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用.

2.3 SharedPreferences的四种操作模式:

  1. Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
  2. Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
  3. Context.MODE_WORLD_READABLE用来控制其他应用是否有权限读该文件.
  4. Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限写该文件.

  MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;

  MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入

2.4 SharedPreferences与SQLite数据库的区别

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

2.5 ContentProvider与SQLite的区别

  Sql只能在该工程的内部共享数据,ContentProvider能在工程之间实现数据共享。

2.6 ContentProvider URI组成部分

  • 标准的前缀: ContentProvider(内容提供者)的scheme已经由Android所规定, scheme为:content://
  • 唯一标识整个ContentProvider: 主机名(或叫Authority)用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。
  • 描述了数据的路径,确定返回哪类数据: 路径(path)可以用来表示我们要操作的数据,路径的构建应根据业务而定

  ID唯一标注请求的数据: 我们要请求数据的ID

2.7 通过contentResolver获取ContentProvider内容的基本步骤

  1. 得到ContentResolver类对象:ContentResolver cr = getContentResolver();
  2. 定义要查询的对象。
  3. 使用cr.query();返回一个Cursor对象。
  4. 使用while循环得到Cursor里面的内容,并把查询出来的数据放到对应的对象属性里。
  5. 关闭Cursor,返回查询结果

  ContentProvider负责组织应用程序的数据,向其他应用程序提供数据;

  ContentResolver则负责获取ContentProvider提供的数据,修改/添加/删除更新数据等

2.8 自定义ContentProvider的步骤

  1. 继承Android的ContentProvider基类实现自己的ContentProvider类。
  2. 实现 ContentProvider里的onCreate方法,创建provider的数据,一般为数据库sqlite。
  3. 重写ContentProvider 中相应的insert/delete/update/query增删改查这些方法。
  4. 在AndroidManifest.xml文件中注册该ContentProvider类,为ContentProvider指定Uri。Uri类似网页访问中使用的URL地址。

  在<application></application>中配置 <provider/>标签以及属性:android:name属性:ContentProvider的类名

  android:authorities属性:用于访问ContentProvider的名称。

2.9 Android中访问自定义ContentProvider

  通过ContentProvider的Uri访问开放的数据。

  1. ContenResolver对象通过Context提供的方法getContenResolver()来获得。

  2. ContenResolver提供了以下方法来操作:insert  delete  update  query这些方法分别会调用ContenProvider中与之对应的方法并得到返回的结果。

2.10 ContentValues的使用

  ContentValues 和HashTable类似都是一种存储的机制 但是两者最大的区别就在于,contenvalues只能存储基本类型的数据,像string,int之类的,不能存储对象这种东西,而HashTable却可以存储对象。

  ContentValues需要配合各种存储方式使用,完成对数据的增删改

 http://wenku.baidu.com/link?url=v6y-2Lk_Tzy56ZpDq8I3eR8vXno0JNb6tL81-XpkhsuwGZ7oPF3knbfvgpOGMoGa3WwCcYbWgwqlzC5LO5KO3mOh7jSvYmWAADHWHlIddf3

http://www.cnblogs.com/smallkure/p/5294991.html

http://www.360doc.com/content/16/0319/00/31777725_543463009.shtml

0 0
原创粉丝点击