第 8 章数据存储
应用程序的开发过程涉及数据的输入、输出和保存。Android提供了以下方式供开发者存取数据:SharedPreferences存储、文件存储、SQLite数据库存储和ContentProvider。
SharedPreferences是Android平台上一个轻量级的存储类,用于存储一些简单的key/value对(名值对)。它的value值只能是int型、long型、boolean型、string型和float型。应用程序中主要保存了一些常用的配置信息。
8.1.1 SharedPreferences和Editor
SharedPreferences是一个接口。要获取SharedPreferences的实例对象,需要调用context.get SharedPreferences(String name, int mode)方法,语法如下。
参数name表示如果该文件不存在,则会在调用SharedPreferences.Editor commit()方法后自动创建。新建的文件保存在“/data/data/项目包名/shared_prefs”目录下。
参数mode支持以下几个值。
MODE_PRIVATE:指定该SharedPreferences里的数据只能被本应用程序读写。
MODE_WORLD_READABLE:指定该SharedPreferences里的数据可以被其他应用程序读,但不可以被其他应用程序写。
MODE_WORLD_WRITEABLE:指定该SharedPreferences里的数据可以被其他应用程序读写。
Android系统也支持使用文件存取数据。Activity提供了openFileOutput()方法,可以将数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件一样。文件可用来存放大量数据,如文本、图片、音频等。
文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法与Java中实现I/O的程序是完全一样的,Android提供了openFileInput()和openFileOutput()方法来读取设备上的文件。
至于文件的存储方式,在Android中有以下几种不同的用法:
● 直接使用java.io包提供的方法实现文件的增、删、读、写。
● 使用Android提供的openFileInput(String name)和openFileOutput(String name,int mode)方法读写数据。
● 从应用目录res中的raw文件夹中获取文件并读取数据。
● 从应用目录asset中获取文件并读取数据。
8.2.1 读写文件中的数据
Context提供了两种方法打开应用程序数据文件夹里的文件I/O流。
FileInputStream openFileInput(String name)方法:打开应用程序数据文件夹里“name”文件对应的输入流,语法如下。
FileOutputStream openFileOutput(String name int mode)方法:打开应用程序数据文件夹里“name”文件对应的输出流,语法如下。
第二种方法中的mode参数支持以下值。
MODE_PRIVATE:该文件只能被当前程序读写。
MODE_APPEND:该文件的内容可以追加。
MODE_WORLD_READABLE:该文件的内容可以被其他程序读。
MODE_WORLD_WRITEABLE:该文件的内容可以被其他程序读写。
(3)在FileStoreActivity中为两个按钮绑定监听(这里通过设置Button控件的onClick属性来绑定监听),以实现数据的保存和读取,代码如下。
在Android中允许用户将程序用到文件放到res中的raw文件夹中,随程序一起打包成.apk文件发布,可以通过ID读取
在asset目录下的文件在被打包成.apk文件时是不会被压缩的,而res下的文件在打包成.apk文件时会被压缩。
Android中提供了AssetManager类来处理应用对asset文件的访问。通过open(String fileName)方法,返回一个InputStream对象,代码示例为: