layout: post
title: 安卓开发(三)数据存储机制、文件IO、SQLite
description: 安卓开发(三)数据存储机制、文件IO、SQLite
tag: 安卓
安卓数据存储方式
SharedPreferences共享偏好设置
先获取到SharedPreferences对象,获取到他的编辑器,写入数据,提交。
sp.getString()来获取键值,第一个参数为键名,第二个参数为如果没有发现键名对应的键值应该返回的内容。
Preferences偏好设置
1-添加preference库依赖
2-构建用户偏好设定页面的布局
ListPreference这样的列表选择,表中具体某一项在单独的xml中定义
通过name建立关系,一个是列表显示的内容,一个是程序中真实对应的值。
回List本身,指明实体和实体值,并赋予列表选项一个默认值1000。
3 - 编写用户偏好页面的fragment类
注意该fragment继承自PreferenceFragmentCompat,
重写onCreatePreference方法,装载刚刚编写的布局文件。
此外还可以对用户偏好修改设置监听回调,例如
在fragment主类实现preference更改的监听
重写onSharePreference()
在应用程序恢复时注册监听,在挂起时取消监听。采用的是getPreferenceScreen()
内部存储
采用文件输出流(FileOutputStream)来将数据保存到文件中 ,指定保存的文件名和模式
Context.MODE_PRIVATE是覆盖模式,下一个用户的数据会覆盖前一个
Context.MODE_APPEND是追加模式。
将name和pwd以##隔开,使用getBytes转为字节流 。
(只要涉及到流的形式,就需要注意判断流是否为空 ,如不为空,关闭流)
采用文件输入流(FileInputStream)来获取文件的字节流。
用字节数组input来接收文件输入流(FileInputStream)的字节流内容,
使用.available(),指定大小。
判断当前读取是否为“-1”(-1代表文件末尾)。
将字节数组转为字符串,使用.split(“##”)方法将字符串以“##”为间隔,分为字符串数组。则数组第一项即为用户名,第二项即为密码。
外部存储(扩展存储)
manifest添加权限:
检查外部存储的可读、可写状态:
外部存储器存文件:
与内部存储的主要不同是,需检查是否可写入,文件保存除了filename参数,还需获取到外部存储的路径
getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS,filename)
读取数据只需要读取权限:
方式类似
SQLite
SQLite简介
在安卓sdk的平台工具目录下有sqlite3
SQLite数据库表的创建与增删改查
新建databaseHelper类
onCreate方法中写sql语句,执行建表操作。
在activity中运用databasehelp类来创表,获取到可写入的数据库表对象db
编写插入数据的SQL语句,利用获取的数据库表对象执行语句。
这里需要注意的是使用单引号包裹每个数据内容,使用双引号和加号包裹变量名实现变量名到变量值的转化。
对于查询操作,查询的结果用游标cursor来接收。
cursor中有各种方法来获取查询结果。
先moveToFirst移动游标到第一条查询结果,
判断当前游标cursor的位置不在最后一条之后,则利用cursor提供的方法,获取对应的表中数据。cursor本身是对查询结果每一条的遍历,因此最后执行cursor移动到下一行。
带筛选条件的查询:
sql语句中先用?代表参数args,args赋值具体的参数uname,注意这里是以字符串数组的形式。
然后查询语句为
db.rawQuery(sql,args)。
更新: