一:数据持久化

何为数据持久化?就是在退出应用程序或重启设备后数据不会丢失,例如每次打开淘宝都可以查看购物车中添加的商品信息和订单情况。

在Android中数据持久化实现方式分为内部存储、外部存储、及网络数据,本章节根据数据持久化的方式对数据的存和取进行一一讲解。

二:数据持久化方式

1:内部存储

内部存储方式创建的所有文件都在和应用包名相同的目录下,默认只有当前应用可以访问这些数据,当前应用程序卸载之后,这些数据也会被删除。在正常设备中无权限查看此目录中的内容,root之后是可以的。

  • File文件存储

根据Android系统提供的方法openFileOutPut()默认存储文件的路径是/data/data/packageName/files/目录下,当然也可以自定义存储路径,通过new File()方法。这里只针对默认的创建方式举例说明:

文件的保存:

openFileOutPut()方法的第一参数为文件名称,第二个参数为保存文件的模式,操作模式分很多种。

MODE_PRIVATE是默认的操作模式,表示当文件存在的时候将覆盖原有的数据 ;

MODE_APPEND表示当文件不存在时则创建,存在时则追加数据 。

文件的读取:

  • SharedPreferences存储

SharedPreferences是使用键值对的方式来存储数据的,根据键读取相应的值,生成的xml文件存储目录为/data/data/packageName/shared_prefs/目录下 。

 1 >  存储方式

存数据时需要先得到SharedPreferences对象,然后再得到SharedPreferences.Edit对象edit , 以edit.putxxx(key,value)方法添加数据,最后用apply()提交数据;获取数据时用SharedPreferences对象的getxx(key,default)方法,default代表根据数据类型自定义的默认值,如果根据key得到的值是空那就返回default定义的值 。

2 >   获取SharedPreferences的方式分为:

context.getSharedPreferences() :

第一个参数为文件名,当前文件不存在则会先创建文件;第二个参数为操作模式,当前默认操作模式为Context.MODE_PRIVATE,表示只有当前应用程序可以对此文件进行读写,与直接传0意思一样 。

((Activity)context).getPreferences():

以默认操作模式做为参数,生成当前Activity名的xml文件 。

PreferenceManager.getDefaultSharedPreferences() :

Context作为参数,生成以当前包名为前缀的xml文件,packageName_preferences.xml

3 >  存储例子:

4> 读取例子:

  • SQLite数据库存储

SQLite是Android内置轻量级数据库,运算速度快,占用资源少,用标准的SQL语法实现相关功能 。数据库存放位置/data/data/packageName/databases/xx.db。

每一个SQLite数据库都有一个叫sqlite_master的系统表,表内存储当前数据库中所有表的相关信息,表名、索引、用于创建此表的sql语句等,sqlite_master只能读取,不能做其他操作;另一个表sqlite_temp_master存储的是所有的临时表,表的结构与sqliter_master一致。

创建数据库及数据表成功后就可以对数据进行操作,分为C=添加/insert;R=查询/select;U=更新/update;D=删除/delete,使用对应的SQL语句实现。借助生成的SQLiteDatabase对象完成CRUD的操作。

1 > 创建数据库

通过实现SQLiteOpenHelper抽象类完成数据库的创建与升级,SQLiteOpenHelper抽象类中的两个抽象方法onCreate() 和onUpgrade(),一般在重写onCreate()方法时实现创建表的逻辑 。

2 > 查看数据库文件(设备需要root)

adb命令查看:

工具查看:

3 > 查看数据表是否存在

4 > 插入表数据

代码插入:

命令行插入:

5 > 查看表数据

代码查看:

命令查看:

6 > 删除表/表数据

删除单条数据:

删除所有数据:

删除表:

7 > 更新数据库

更新数据库最初方式,直接在onUpgrade()方法中添加如下语句,如果表存在则将原表删除重新调用onCreate()方法进行创建

初始化时更改下数据库版本号:

但这样会有一个问题,添加新表会删除之前表及表数据,导致原有数据清空,升级数据库一般都会保留原数据。如果直接从v1版升级到v2版,就从当前数据库版本为DEFAULT_VERSION=1,更新至NEW_VERSION=2,那就直接调用onUpgrade()方法,在方法内部判断版本号,如果新版本号>旧版本号,并且旧版本号与DEFAULT_VERSION相等那就在原数据库中再添加一个Book表;

如果直接安装v2版本,那直接调用onCreate() -->onUpgrade()方法,onUpgrade()实现同上,如果多次升级数据库那就可以根据对应版本号做相应更改的操作。

这时查看下user.db数据库中的表,可以看到包含Book与User:

查看Book表中也成功添加了一条数据

8 > 更新表数据

代码更新:

更新结果:

命令更新:

也可以用SQLiteDatabase的execSQL(sql)执行Sql语句来完成CRUD的操作,这里就不详细说了。

2:外部存储

外部存储一般是存储在sdcard上,任何有sdcard访问权限的应用均可以对数据进行访问,外部存储需要申请读写权限 ,否则访问时会抛异常。

  • SdCard存储

3:网络数据

有些数据需要实时更新,那用内部或外部存储工作量会很大,所占空间也大,这时通过网络请求向服务端请求所需要的数据会方便很多,需要指定网络权限 ,具体网络请求实现可以用原生的也可以使用相应类库。

 

更多相关文章

  1. Android(安卓)recovery 复制大量预装 apk的方法
  2. 在eclipse中使用ServiceManager
  3. Android(安卓)内容提供器---内容提供器基础(概述)
  4. Android(安卓)NDK读取文件
  5. android App集成支付宝
  6. Android(安卓)用MediaCodec ,MediaExtractor解码播放MP4文件
  7. Android个推php后台开发
  8. H5跟ios、android数据对接
  9. Android(安卓)低功耗(BLE)蓝牙(三)

随机推荐

  1. 错误 'roundIcon' in package 'android'
  2. 读取android手机流量信息
  3. ViewModel、ViewModelProviders、ViewMod
  4. android 状态栏和导航栏(status and navi
  5. Android(安卓)Studio 启动 无缘故报 Erro
  6. Android中改变Dialog背景透明度
  7. android中的状态栏
  8. Android中文API(95)——SimpleExpandableLi
  9. 在设置里面增加关闭和打开GPS ,数据流量的
  10. 原:Android(安卓)命令行手动编译打包详解