android 数据保存及持久化设计总结

[TOC]

数据持久化就是两种一个保存在文件中,另外一个是数据库中.

SharedPreferences


Android提供了一个SharedPreferences类,它是一个轻量级的存储类,适合保存用户偏好设置参数和读取设置参数。常用于存储程序设置的内容和选项结果.

使用键值对进行存储,将一些简单的数据类型的数据,包括boolean类型、int类型、float类型、long类型以及String类型的数据,以键值对的形式存储在应用程序的私有Preferences目录(/data/data/<应用包名>/shared_prefs/)中

使用方式:
– 通过调用上下文的方法getSharedPreferences 获取 SharedPreferences 的实例化对象
– 调用上下文的方法 getPreferences 获取 SharedPreferences 的实例化对象
– 第三种是通过PreferenceManager类的静态方法getDefaultSharedPreferences,来获取SharedPreference对象

保存sharedpreference,先通过sharedpreferences对象的edit()方法,获取editor对象,然后调用editor对象的put方法存入数据,最后要使用editor对象的commit方法提交
读取就使用sharedpreferences,使用其对象的get方法,getstring(),getInt();

文件存储

根据android 有两种存储地区,一个是内部存储,另外一个是外部存储方式.

  • 内部存储:将存放的数据文件存储在内部/data/data/<应用包名>目录中
  • 外部存储:存放在sd卡等外部地方:使用Environment的静态方法getExternalStorageDirectory()来获取外部存储的根路径,外部存储中的文件是可以被用户或者其他应用程序修改的。getExternalStorageState()可以获取当前外部存储器的状态

要使用sd卡要添加如下权限

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

sqlite


android中内置了一个SQLite数据库,支持SQL语言,是轻量级的嵌入式数据库.SQLite不支持一些标准的SQL功能,特别是外键约束(FOREIGN KEY),嵌套Transcaction和“RIGHT OUTER JOIN”及“FULL OUTER JOIN” 等
SQLite数据库默认存储在/data/data/<应用包名>/databases/目录下

SQLiteOpenHelper类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。
insert(String table, String nullColumnHack, ContentValues values);向数据库表中写入一条数据
– 更新一条数据update(String table, Contentvalues values, String whereClause, String [] whereArgs);
– 删除delete(String table, String whereClause, String [] whereArgs);
– Cursor query(String table,String[] columns, String whereClause, String [] whereArgs,String groupBy,String having,String orderBy,String limit);查询数据,返回值为Cursor,将查询到的结果都存在Cursor。

table:数据库表的名称
columns:数据库列名称数组
whereClause:查询条件,表示WHERE表达式,比如“age > ? and age < ?”
whereArgs:占位符的实际参数值
groupBy:指定分组的列名
having:指定分组条件
orderBy:指定排序的列名
limit:分页查询限制
nullColumnHack:表示如果插入的数据每一列都为空的话,需要指定此行中某一列的名称,系统将此列设置为NULL,不至于出现错误
ContentValues:键值对组成的Map,key代表列名,value代表该列要插入的值

ContentProvider

ContentProvider(内容提供者)
为存储和获取数据提供了统一的接口,使用ContentProvider可以在不同的应用程序之间共享数据.
ContentProvider为一些数据提供外部访问的接口,比如通话记录、联系人、短信、多媒体文件等,以方便开发人员访问数据,减少开发成本。

Android所提供的ContentProvider都存放在android.provider包当中。每一个ContentProvider都拥有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据。

  • URI主要包含了两部分信息:需要操作的ContentProvider,对ContentProvider中的什么数据进行操作。
  • URI组成:scheme:ContentProvider的scheme已经由Android所规定为:content://。
    主机名(或Authority):用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。
    路径(path):可以用来表示要操作的数据,路径的构建应根据业务而定,比如:
    要操作contact表中id为10的记录,可以构建这样的路径:/contact/10
    要操作contact表中id为10的记录的name字段,contact/10/name
    要操作contact表中的所有记录,可以构建这样的路径:/contact

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注