Android的本地数据存储

在Android开发中,常常需要在本地存储一些数据。幸运的是,Android平台提供了n种存储方式,不仅可以直接使用内部和外部存储(sdcard),Android还提供了存储关系型数据的SQLite,存储键值对的特殊文件,还可以选择使用第三方NoSQL库。

下面介绍怎么使用这些存储方式;根据要存储的数据选择最合适的存储方式。

#1 存储键值对(SharedPreferences)

如果你要保存少量的数据,且这些数据的格式非常简单,例如:字符串、基本类型的值。如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分),解锁口令等等。

SharedPreferences使用xml格式为Android应用提供一种永久的数据存储方式,并且是使用键值对的方式来存储数据的。对于一个Android应用,它存储在文件系统的/data/data/your_app_package_name/shared_prefs/目录下,可以被处在同一个应用中的所有Activity 访问。Android提供了相关的API来处理这些数据而不需要程序员直接操作这些文件或者考虑数据同步的问题。

在Activity和Service中可以使用PreferenceManager中的getSharedPreferences方法获得SharedPreferences对象:

SharedPreferences对象用来读写xml文件。

要想写入数据,首先调用edit方法获得ShardPreferences.Editor对象:

ShardPreferences.Editor提供几个非常直观的方法,可以把键值对写入到xml文件中:

在执行完上面方法之后,必须调用commit方法提交数据:

读取数据要简单一点,只需要调用和put对应的getXxx方法:

上面的第二个参数是默认值,如果key没有值,则返回第二个参数中的值。

注意:SharedPreferences只适合存储字符串和基本数据类型。

 #2 使用SQLite数据库

SQLite是一个轻量级的数据库,适合存储结构化数据。它支持SQL语言,并且只利用很少的内存就有很好的性能,现在的主流移动设备像Android、iPhone等都使用SQLite作为数据存储。Android为此数据库提供了一个名为SQLiteDatabase的类,封装了一些操作数据库的API。

要打开或创建SQLite数据库,你可以在Activity或Service中调用openOrCreateDatabase()方法:

第一个参数'”my.db”是要创建或打开的数据;第二个参数MODE_PRIVATE代表私有模式,也就是只有当前应用可以访问这个数据库。

数据库创建完成之后就可以使用execSQL方法执行SQL语句了,例如,创建一个叫user的表,这个表包含三个字段:姓名、年龄、性别(0-女,1-男)。

插入一条记录虽然可以使用execSQL方法,但是推荐使用insert()方法。insert使用ContentValues变量表示字段,ContentValues是键值对组成的Map,key代表列名,value代表该列要插入的值。

例如,要插入两条记录:

调用insert()方法插入两个记录:

查询数据库可以使用rawQuery方法,它返回一个包含查询结果的Cursor对象:

其它数据库操作:

数据库使用完成之后不要忘了close:

文档:

#3 使用内部存储

每个Android应用都有私有的内部存储目录,这个目录可以用来存储二进制文件和文本文件。用户和其它应用都不可以访问这个目录,它随应用卸载而删除。

要想使用内部存储,你首先要获得这个目录路径:

获得目录中一个文件的引用:

有了myFile,你就可以使用Java I/O的知识读写这个文件了:

#4 使用外部存储(sdcard)

由于Android的内存存储空间有限,并且大多数Andorid设备都支持外部存储(sdcard),一般建议把大文件存储到sdcard卡上,例如:游戏资源文件、视频、图片等。

Android的外部存储和内部存储不一样,外部存储有时并不可用,所以在使用之前最好判断一下,使用Environment类中的getExternalStorageState方法:

如果外部存储可用,使用下面函数获得对应的目录:

注意:手机应该已插入SD卡,对于模拟器而言,可通过mksdcard命令来创建虚拟SD卡。AndroidManifest.xml添加读写SD卡的权限:

总结

不管你选项哪种存储方式,读写数据是非常耗时的,尤其是大文件,确保把费时的操作放在非UI线程。

Andoird的存储方式:https://developer.android.com/guide/topics/data/data-storage.html

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注