主要内容:
1.向文件存储数据
2.从文件读取数据
3.用SharedPregerences存储
4.从SharedPregerences读取数据
5.SQLite数据库相关内容
0.Android中的持久化技术
数据持久化:将内存中的瞬时数据保存到存储设备中,存储在存储设备中的数据就拥有了持久状态。
三种数据持久化方式:文件存储、SharedPreference存储及数据库存储(这三种方式比起保存在SD卡中更简单、更安全)
1.文件存储数据
-
特点:
比较适合存储简单的文本数据或二进制数据,因为不对存储内容进行任何格式化处理,数据原封不动地保存到文件中
(复杂的文本数据需要定义一套自己的格式规范以便之后复杂文本的解析) -
主要方法:
Context
类中的openFileOutput
方法
方法中的两个参数: 文件名(不包含路径)、文件的操作模式(MODE_PRIVATE
和MODE_APPEND
)
MODE_PRIVATE:默认操作模式,覆盖原文件
MODE_APPEND:追加到原文件后 -
返回:
FileOutputStream
对象 -
存储路径: /data/data/<packagename>/files/
2. 从文件中读取数据
-
主要方法:
Context
类中的openFileInput
方法
**方法中的 1 个参数: 文件名(不包含路径) -
返回:
FileInputStream
对象 -
存储路径: /data/data/<packagename>/files/
得到FileInputStream
对象之后就可以通过Java流的方式将数据读取出来
3.SharedPregerences存储数据
用键值对的方式存储数据
支持多种不同的存储类型
-
获取
SharedPreferences
对象的三种方法:Context
类中的getPreference()
方法
两个参数:文件名和操作模式(只有MODE_PRIVATE
,也可以直接传入0
,表示只有当前应用程序才可以对SharedPreference文件进行读写,其它均已被废弃)Activity类中的
getPreference()
方法
只有1个参数:操作模式,文件名为当前活动的类名PreferenceManager
类中的getDefaultPreferences()
方法
静态方法,接收一个Context参数,且自动使用当前应用程序包名作为前缀来命名SharedPreference文件
实现三步曲:
(1)获取SharedPreferences.Editor对象
SharedPreferences.Editor editor=SharedPreferences("filename","oprate mode").edit()
(2)向SharedPreferences.Editor
对象中添加数据,用putBoolean()
、putString()
等方法
(3)调用apply()
方法将添加的数据提交
存储路径: /data/data/<packagename>/shared_prefs/
4. 从SharedPreference中读取数据
用SharedPreferences
对象中的getBoolean("key","defaultvalue")
方法进行读取
相关代码请看→这里←
其它:
在Android Studio 3.4.1出现了无法访问文件目录的情况,这里使用adb shell来修改权限↓↓↓
adb shell的使用:
首先在系统变量种添加adb.exe的路径:
找到sdk路径下的platform-tools路径,将该路径添加到环境变量的path变量中
接着在cmd命令窗口就可以使用adb shell命令了:
上图中第二个箭头所指的位置需要做说明:
如果sdk在22时,出现的提示就和上图一样,虚拟机直接已经有了root权限,并且可以直接执行给data/data等目录添加权限的操作;如果sdk是26,要先通过su
命令获取虚拟机的root权限,如果是目前的sdk28,则不能通过su
命令获取root权限
0616更新
5.SQLite数据库相关内容
【目录】
- SQLite数据库简介
- SQLite数据库的使用
(1). 创建数据库
(2). 升级数据库
(3). 添加数据
(4). 更新数据
(5). 删除数据
(6). 查询数据
(7). 用SQL语句直接操作数据
相关代码在这里
1. SQLite数据库简介
SQLite是一款轻量级的关系型数据库,可以存储大量复杂的关系型数据;运算速度非常快,占用内存通常只需要几百KB;支持标准SQL语法和ACID事务。
ACID事务,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),一个支持事务(Transaction)的数据库,必须要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易双方的要求。
2. SQLite数据库的使用
1. 创建数据库
存放路径:/data/data/<package name>/databases/
1). 抽象类SQLiteOpenHelper
主要内容:
- 两个抽象方法:
onCreate()
用来初次创建表时使用,onUpgrade
升级数据库时使用 - 两个实例方法:
getWritableDatabase()
用来向数据库写数据,getReadableDatabase()
用来从数据库读数据,返回一个SQLiteDatabase
对象
2). 创建数据库的具体操作
-
得到实现了
SQLiteOpenHelper
的类MyDatabaseHelper
的实例,并得到一个SQLiteDatabase对象,表示打开或成功创建了数据库BookStore.db:
-
MyDatabaseHelper
中只需要写如下语句:
3). 用Android SDK中自带的调试工具:adb查看创建的数据库和表
路径:sdk的platform-tools目录
Windows中adb的使用方法和具体步骤:
1.添加环境变量到path
2.进入控制台(命令adb shell)
3.进入到数据库所在目录下(data/data/com.example.databasetest/databases)用ls
命令查看该目录下具有的文件
4.用sqlite3 **.db
命令打开对应的数据库,用.table
命令查看其中有哪些表(其中android_metadata表是每个数据库中都会生成的),用.schema
命令查看建表语句
过程中遇到的问题:
①遇到了Permission denied
相关错误,参考这里的方法,把模拟器版本将到6.0及以下就可以了;
②退出...>
的方法:输入"[空格];"
,空格和分号,该方法来自这里
2. 升级数据库
- 需要将版本号变为比原来版本号大的数
- 再在
MyDatabaseHelper
中写成如下形式:
3. 添加数据
出现过的小问题: adb中为什么select * from Book
之后要先退出...>
状态才能显示出表内数据?这是因为sql语句后要加;
才完整
网友评论