Android数据存储技术分类
本地数据存储技术
-
SharedPreferences(XML格式数据)
-
File(二进制数据为主)
-
SQLite(关系型数据)
远程数据存储技术 -
基于Socket使用TCP/IP直接访问网络服务器(数据从数据源直接传送到目的地)
-
基于HTTP相关协议访问Web服务(从互联网上获取HTML、json/xml、二进制格式的数据)
SharedPreferences
基本特点
- 数据以“key-value”方式存储与处理
- 数据明文存储于xml文件中
- Android内置相应数据存储组件,使用简单方便
适用场景
- 比较适用于保存少量的数据,更新不频繁,不需要进行复杂的查询,并且对安全性没有太大要求
使用文件保存数据
基本特点
- 可以保存任意类型、任意大小的数据,但是需要自行编写数据解析代码
- Android使用标准Java编程方式,通过Stream存取底层文件
适用场景
- 保存二进制的,数据量较大的数据(照片、视频等)
- 有特殊格式的文本型数据
- 有特殊处理需求的数据(比如数据需要加密后存储)
使用关系数据库存储数据
基本情况
- Android内置于对SQLite的支持,在android.database.sqlite包中提供了相应的组件
- SQLite是一种单用户单文件型数据库,文件保存于本机内置存储空间,占用系统资源小,是黑夜手机这种内存受限的运行环境
- 入股其他App需要访问这些数据,可以使用Content Provider
适用场景
- 以文本型数据为主
- 需要进行频繁的CRUD操作
SharedPreferences
- 在SharedPreferences是一种轻量级的数据存储方式,可以将键/值对的数据,保存在Android的文件系统中,完全屏蔽了文件系统的操作过程
- 存储在应用程序的私有目录下(data/data/包名/shared-prefs)自己定义的xml文件中
- SharedPreferences支持整形、布尔型、浮点型、长整形、字符串数据类型,特别适用于保存少量数据,更型不频繁且安全性不高的场合,如:软件配置参数
使用SharedPreferences
- 操作前,需获取SharedPreferences对象
- 存储数据步骤:
1.用SharedPreferences对象的方法edit()获得一个Editor对象
2.通过putString以键值<String key ,String value>方式把字符串值写入Editor对象中,其他类型数据调用相应的put()方法
3.最后利用conmmit()或apply()方法提交数据
private void savePrefs(String username){
SharedPreferences.Editor editor=getSharedPreferences("pref", Context.MODE_PRIVATE).edit();
editor.apply();
}
获取SharedPreferences对象
-
可以通过多种方式获得SharedPreferences对象
-
Context.getSharedPreferences(String name ,int mode)
1.name为文件名称
2.mode为操作模式,默认的模式为0或MODE-PRIVATE,还可以使用MODE-READABLE和MODE-WRITEABLE -
Activity.getSharedPreferences(int mode):只能在当前activity使用,一般不用
1.使用当前不带包名的类名作为文件的名称
2.mode为操作模式,默认的模式为0或MODE-PRIVATE,还可以使用MODE-READABLE和MODE-WRITEABLE
SharedPreferences数据读取
- 从已经保存的SharedPreferences中读取数据
1.调用getSharedPreferences()函数
2.通过get()函数获取保存在SharedPreferences中的键值对
private String readPrefs(){
SharedPreferences prefs=getSharedPreferences("pref",Context.MODE_PRIVATE);
return prefs.getString("username","");
}
⚠️注意:
1.勿存储过大的value
2.勿存储复杂的数据,JSON和html格式的数据需要转义
3.建议使用apply,少用commit
文件存取
Android的存储系统
本机内置系统存储
- /data/data/< package name>/
- 仅供App自己使用,属“私有数据”
- App卸载时自动删除
本机外部系统存储
- /storage/emulated/< package name>/
- 存储照片、音乐等,属“共享数据”
- App卸载时保留
外部可扩充存储
- SD卡上的任意文件夹
- 可供任意App访问
- App卸载后仍然保存
- 不在配置SD卡
Android存储系统的重要的文件夹
- /data/app:保留各个应用
- /data/data:各个应用保存私有数据的地方
- /mnt/scared:代表SD卡的根目录
- /system:对应用只读,保存Android操作系统文件
Context类的文件管理方法
注意:上面各方法所操作的文件及文件夹,位于“/data/data< package name>/”下
数据库存储
SQLite数据库
- 一种轻量级关系型数据库
- 占用资源小,只需要几百k内存,特别适合在嵌入式系统中使用
- 支持标准的SQL语法,支持事务机制
- Android专门提供了SQLiteOpenHelper类,对数据库进行操作
SQLite的数据类型
- NULL
- INTEGER:整数
- REAL:浮点数
- TEXT:文本与字符串
- BLOB:二进制类型的数据
Android数据库编程方式
- 直接访问:使用SQLiteDatabase类
- 初步封装:使用SQLiteOpenHelper类
- 自定义:我们自己封装数据存取代码
直接访问数据库
- 在Activity中可以调用openOrCreateDatabase()方法创建或打开一个数据库,获取一个SQLiteDatabase对象的引用
- 创建的数据库存放的目录:/data/data/packageName/databases/
- 调用SQLiteDatabase类提供的相应方法将SQL命令直接发送给数据库
1.exeSQL()方法:可以执行insert、delete、update和create table之类有更改行为的SQL语句
2.rawQuery()方法:可以执行select语句,返回一个Cursor
Cursor对象
- Cursor是每行数据的集合
- 使用moveToFirst()定位第一行
- 必须知道每一列的名称
- 必须知道每一列的数据类型
- Cursor是一个随机的数据源
- 所有的数据都是通过下标取得
SQLiteDatabase实现CRUD
- 对于常见的CRUD操作,SQLiteDatabase进行了简单的封装,提供了对应的几个方法,拥有N多的参数
SQLiteOpenHelper类
- SQLiteOpenHelper类是一个用于创建或打开数据库的辅助类
- SQLiteOpenHelper类是一个抽象类,包含两个重要的方法:
1.onCreat(SQLiteDatabase db);新建数据库时调用
2.onUpgrade(SQLiteDatabase db,int oldVersion ,int newVersion):数据库版本升级时调用 - 构造出实例后调用getWritableDatabase()或getReadableDatabase()方法获取Database对象
- 创建的数据库存放目录:/data/data/packageName/database/
使用SQLiteOpenHelper
编程套路:
1.从SQLiteOpenHelper派生,提供一个构造函数,重写其onCreat()和onUpdate()方法
2.在Activity中调用getWritableDatabase()方法
MyDBHelper helper=new MyDBHelper(this);
SQLiteDatabase db=helper.getWritableDatabase();
ContentProvider
ContentProvider
- ContentProvider是Android的四大组件之一
- 不同应用程序之间数据交换的标准API,实现数据在不同应用程序直接的共享
- 一个程序可以通过ContentProvider的抽象接口,见自己的数据以Uri形式暴露出去,其它应用程序可以使用ContentProvider,根据Uri访问操作指定数据,对应用中的数据进行增删改查
- 标准的ContentProvider:Android提供一些标准ContentProvider,如:联系人信息、图片库等,可以使用这些ContentProvider访问设备上存储的联系人信息、图片等
- 开发流程:
1.定义继承ContentProvider自定义类
2.在AndroidManifest.xml用< provider>标签注册
URI
- 统一资源标识符:uniform resource identifier
- ContentProvider以表的形式组织数据,使用的查询字符串有别于标准的SQL查询,增删改查等操作使用特殊的URI进行
- URI由3部分组成,content://代表数据的路径和一个可选的表示数据的ID
1.content://media/internal/images:返回设备上存储的所有图片
2.content://contacts/people/:返回设备上所有联系人信息
3.content://contacts/people/45:返回ID为45的单个联系人信息 - Uri uri=Uri.parse(“content://contacts/people/45”)
管理联系人
- 调用getContentResolver()获取ContentResolver对象
- 调用insert()、update()、delete()、query()等方法
- 在AndroidMainfest配置文件中声明许可
1.android.permission.READ_CONTACTS
2.android.permission.WRITE_CONTACTS
ContentProvider的工具类
-
Android提供了3个用于辅助ContentProvider的工具类
ContentUris:操作URI,核心方法:
withAppendedID(uri,id):为uri路径加上ID部分
parseID(uri):解析uri中的ID -
UriMatcher,在ContentProvider中注册URI,根据URI匹配
-
ContentObserver类:内容观察者,观察uri引起ContentProvider中的数据变化,并通知访问该数据访问者
以上就是对数据存储的整理,在整理过程中也学到了很多,也复习很多知识点。