当前位置: 代码迷 >> Android >> [Android API学习]Data Storage胡乱通译(1)
  详细解决方案

[Android API学习]Data Storage胡乱通译(1)

热度:56   发布时间:2016-05-01 16:36:17.0
[Android API学习]Data Storage胡乱翻译(1)

原文请查阅:http://developer.android.com.nyud.net/guide/topics/data/data-storage.html

?

数据储存 (Data Storage)

Android为你提供了多个可选的方式来保存持久的应用数据。你可以基于特定的需求来选择解决方案,例如数据是否应该是你的应用私有的还是对其他应用(和用户)公开的以及你的数据需要多大的空间来储存。

?

你可选的数据储存方式如下:

Shared Preferences??共享偏好
以"键-值对"的形式储存私有的基础数据。?
Internal Storage?内部存储器
储存私有数据到设备内存。
External Storage?外部存储器
储存公有数据到共享的外部储存器。
SQLite Databases?SQLite数据库
用一个私有的数据库储存结构化数据。
Network Connection?网络连接
通过你自己的服务器储存数据到网络。
Android为你提供了一个途径来暴露你私有数据给其他的应用程序 —— 通过一个content provider。一个content provider是一个可选组件,暴露你的应用程序数据的read/write接口,遵循任何可能引入的约定。更多关于content provider使用的信息,请查阅Content Providers文档

使用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()等函数。

?

这里是一个例子,为一个计算器的按键静音模式保存了一个偏好:
public class Calc extends Activity {	public static final String PREFS_NAME = "MyPrefsFile";	@Override	protected void onCreate(Bundle state) {		super.onCreate(state);		 . . .		// Restore preferences		SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);		boolean silent = settings.getBoolean("silentMode", false);		setSilent(silent);	}	@Override	protected void onStop() {		super.onStop();		// We need an Editor object to make preference changes.		// All objects are from android.context.Context		SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);		SharedPreferences.Editor editor = settings.edit();		editor.putBoolean("silentMode", mSilentMode);		// Commit the edits!		editor.commit();	}}

使用内部存储器 (Using the Internal Storage)

你可以直接将文件保存到设备的内部存储器上。默认的,保存到内部存储器上的文件是对你的应用私有的并且其他应用无法访问它们(用户也不行)。当用户卸载你的应用,这些文件会被移除。

?

要创建和写入一个私有文件到内部存储器:

1.通过文件名和处理模式调用openFileOutput()函数。返回的是一个FileOutputStream对象。

2.使用write()函数来写入文件。

3.使用close()函数来关闭流。

?

For example:

String FILENAME = "hello_file";String string = "hello world!";FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);fos.write(string.getBytes());fos.close(); 
MODE_PRIVATE会创建文件并使它对你的应用私有。其他可用的模式有:MODE_APPENDMODE_WORLD_READABLEMODE_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()
返回一个你的应用当前保存了的文件的数组。?
  相关解决方案