数据存储
Android的数据存储技术
- 本地数据存取技术
SharedPreferences(XML格式数据)
File(二进制数据为 主)
SQLite(关系型数据) - 远程数据存取技术
基于Socket使用TCP/IP直接访问网络服务器(数据从 数据源直接传送到目的地)。
基于HTTP相关协议访问Web服务(从互联网上获取HTML、json/xml、二进制格式的数据)
SharedPreferences
- 概念
是一种轻量级的数据存储方式,可以将键/值对的数据,保存在Android的文件系统中,完全屏蔽了文件系统的操作过程。
支持整型、布尔型、浮点型、长整形、字符串数据类型,特别适合用于保存少量数据,更新不频繁且安全性要求不高的场合,如:软件配置参数。 - 基本特点
数据以"key -value"方式存储与处理。
数据明文存储于xml文件中。
Android内置相应数据存取组件,使用简单方便。 - 使用场景
适合于保存少量的数据,更新不频繁,不需要进行复杂的查询,并且对安全性没有太大要求的场合。 - 存储数据步骤
用SharedPreferences对象的方法edit()获得一个Editor对象。
通过putString以键值<String key, String value>方式把字符串值写入Editor对象中,其他类型数据调用相应的put()方法。
最后利用commit()或apply()方法提交数据。 - 获得其对象的方法
Context.getSharedPreferences(String name, int mode)。
Activity.getPreferences(int mode):只能在当前activity使用,一般不用。
MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE两种模式已经在4.2版本废除。 - 数据读取
调用getSharedPreferences()函数。
通过get()函数获取保存在SharedPreferences中的键值对。
文件存储
- 基本特点
可以保存任意类型、任意大小的数据,但是 需要自 行编写数据解析代码
Android使用标准Java编程方式,通过Stream(及派生或组合类型)存取底层文件 - 使用场景
保存二进制的,数据量较大的数据( 比如照片 、视频等 )。
有特殊格式的文本型数据。
有特殊处理需求的数据(比如数据需要加密后存储 )。
3.存储系统- 本机内置系统存储
/data/data//。
仅供App自己使用,属"私有数据"。
App卸载时自动删除。 - 本机外部系统存储
/storage/emulated//。
存储照片、音乐等,属"共享数据"。
App卸载时保留。 - 外部可扩充存储
SD卡上的任意文件夹。
可供任意App访问。
App卸载后仍然保存。
不在配置SD卡。
- 存储系统的重要文件夹
/data/app:保存各个应用
/data/data:各个应用保存私有数据的地方
/mnt/sdcard:代表SD卡的根目录
/system:对应用只读,保存Android操作系统文件21
- 本机内置系统存储
数据库存储SQLite
- 概念
Android内置对SQLite的支持,在android.database.sqlite包中提供了相应的组件。
SQLite是一种单用户单文件型数据 库,文件保存于本机 内置存储空间,占用系统资源小,适合于手机这种内存受限的运行环境。
如果其它App需要访问这些数据,可以使 用ContentProvider。 - 使用场景
以文本型数据为主。
需要进行频繁的CRUD操作。 - 数据类型
NULL
INTEGER:整数
REAL:浮点数
TEXT:文本与字符串
BLOB:二进制类型的数据 - 编写方法
直接访问:使用SQLiteDatabase类
初步封装:使用SQLiteOpenHelper类
自定义:我们自己封装数据存取代码 - SQLiteOpenHelper类
SQLiteOpenHelper类是一个用于创建或打开数据库的辅助类。 SQLiteOpenHelper类是一个抽象类,包含两个重要的方法:1.onCreate(SQLiteDatabasedb):新建数据库时调用2.onUpgrade(SQLiteDatabasedb, int oldVersion, int newVersion):数据库版本升级时调用
构造出实例后调用getWritableDatabase()或getReadableDatabase()方法获取Database对象
创建的数据库存放目录:/data/data/packageName/databases/36
ContentProvider3
- ContentProvider是Android的四大组件之一
- 不同应用程序之间数据交换的标准API,实现数据在不同应用程序直接的共享。
- 一个程序可以通过ContentProvider的抽象接口,将自己的数据以Uri形式暴露出去。其它应用程序可以使用ContentResolver,根据Uri访问操作指定数据,对应用中的数据进行增删改查。
- 标准的ContentProvider:Android提供一些标准ContentProvider,如:联系人信息、图片库等,可以使用这些ContentProvider访问设备上存储的联系人信息、图片、音频、视频等
- 开发流程
定义继承ContentProvider的自定义类。
在AndroidManifest.xml用标签注册。