[Android API学习]Data Storage胡乱翻译(1)
原文请查阅:http://developer.android.com.nyud.net/guide/topics/data/data-storage.html
?
数据储存 (Data Storage)
Android为你提供了多个可选的方式来保存持久的应用数据。你可以基于特定的需求来选择解决方案,例如数据是否应该是你的应用私有的还是对其他应用(和用户)公开的以及你的数据需要多大的空间来储存。
?
你可选的数据储存方式如下:
使用Shared Preferences (Using Shared Preferences)SharedPreferences类提供了一个通用的框架来允许你以"键-值对"的形式来储存和获取持久的基础数据。你可以使用SharedPreferences来保存任何基础数据:boolean, float, int, long和String。这些数据将存留横跨用户对话(即使你的应用程序被杀死了)。User Preferences
Shared preferences are not strictly for saving "user preferences," such as what ringtone a user has chosen. If you're interested in creating user preferences for your application, see PreferenceActivity
, which provides an Activity framework for you to create user preferences, which will be automatically persisted (using shared preferences).
?
要给你的应用获取一个SharedPreference对象,使用以下的两个函数之一:- getSharedPreferences()- 如果你需要多个通过名字来识别的偏好文件请使用该函数,名字通过第一个参数来设定。
- getPreferences() -?如果你的Activity仅需要一个偏好文件请使用该函数。因为这会是你的Activity独有的偏好文件,你不用提供一个文件名。?
?
写入数值:
1.调用edit()函数来获得一个SharedPreferences.Editor对象。
2.通过putBoolean()、putString()等函数来添加数值。
3.通过commit()函数来提交和确认操作。
?
要读取数值,使用SharedPreferences中的getBoolean()、getString()等函数。?
这里是一个例子,为一个计算器的按键静音模式保存了一个偏好:String FILENAME = "hello_file";String string = "hello world!";FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);fos.write(string.getBytes());fos.close();
MODE_PRIVATE会创建文件并使它对你的应用私有。其他可用的模式有:MODE_APPEND、MODE_WORLD_READABLE
和MODE_WORLD_WRITEABLE。
?
要从内部存储器中读取一个文件:1.调用openFileInput()函数并传递一个文件名来读取。返回的是一个FileInputStream对象。
2.使用read()函数读取文件中的字节。
3.然后使用close()函数关闭流。
提示:如果你希望在编译的时候保存一个静态的文件到你的应用中,将文件保存到你项目的res/raw/?目录下。你使用openRawResource()函数可以打开它,传递一个R.raw.<filename>资源ID。该函数返回一个你可以用来读取文件的InputStream对象(但你无法改写原始文件)。
保存缓存文件 (Saving cache files)如果你想缓存一些数据,而不是永久储存,你应该使用getCacheDir()来打开一个代表内部存储器中储存临时缓存文件的目录的File对象。
?
当设备的内部储存空间较低时,Android可能会删除这些缓存文件来取回空间。无论如何,你不应该依靠系统来为你清空这些文件。你应该始终自己来维护缓存文件并维持在一个合理的空间消耗,比如1MB。当用户卸载你的应用,这些文件会被移除。
?
其他有用的函数 (Other useful methods)
getFilesDir()
- 获取你的内部文件所储存的系统目录的绝对路径。
getDir()
- 在你的内部存储器空间中创建(或打开一个存在的)目录。
deleteFile()
- 删除一个保存在内部存储器上的文件。
fileList()
- 返回一个你的应用当前保存了的文件的数组。?