欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

谷歌官方文档:Android API之数据储存(1)

来源: 开发者 投稿于  被查看 48569 次 评论:229

谷歌官方文档:Android API之数据储存(1)


本文将简述Android API的数据储存 (Data Storage)工作机制,希望本文能对正在做Android开发的朋友有所帮助。

数据储存 (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() 等函数。

这里是一个例子,为一个计算器的按键静音模式保存了一个偏好:

Java代码

  1. public class Calc extends Activity {    
  2.     
  3.     public static final String PREFS_NAME = "MyPrefsFile";    
  4.     
  5.     @Override    
  6.     protected void onCreate(Bundle state) {    
  7.         super.onCreate(state);    
  8.          . . .    
  9.         // Restore preferences    
  10.         SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);    
  11.         boolean silent = settings.getBoolean("silentMode", false);    
  12.         setSilent(silent);    
  13.     }    
  14.     
  15.     @Override    
  16.     protected void onStop() {    
  17.         super.onStop();    
  18.         // We need an Editor object to make preference changes.    
  19.         // All objects are from android.context.Context    
  20.         SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);    
  21.         SharedPreferences.Editor editor = settings.edit();    
  22.         editor.putBoolean("silentMode", mSilentMode);    
  23.         // Commit the edits!    
  24.         editor.commit();    
  25.     }    
  26. }   

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

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

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

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

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

For example:

Java代码 

  1. String FILENAME = "hello_file";    
  2. String string = "hello world!";    
  3. FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);    
  4. fos.write(string.getBytes());    
  5. 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()

返回一个你的应用当前保存了的文件的数组。


用户评论