【Android API Guides 简译(三)】Data Storage

Android提供了几种永久储存手机数据的选项,而我们选择存储的方式依据于我们存储的不同的特定需求,比如你的数据是否需要只对自己公开,数据是否可以被其他应用得到或者你想要储存多大的数据。 数据存储的方式如下: Shared Preferences 通过xml类型的键值对,存储私密的原始数据。 Internal Storage 内部存储 通过手机内存存储私密数据 External Storage 外部存储 在设备外部共享里存储公开的数据 SQLite Databases Android 原生内部数据库 在私有数据库里存储结构化的数据 Network Connection 网络连接 在网络服务器上存储数据 Android 还提供了一种将私有的数据公开化的组件–Content-providers,详见Content-providers参考文档。

一、使用Shared Preferences SharedPreferences类提供了一个完整的框架用来通过键值对的形式,永久地储存私有信息。我们可以使用SharedPreferences类储存任意一种类型的数据,包括booleans, floats, ints, longs, and strings。而且这些数据将会在整个会话阶段一直保存,即使你的应用被关闭。 得到SharedPreferences对象的两种方式: 1、getSharedPreferences() – 如果你想要得到一个通过键名来区分的笼统的Preferences对象,使用这种方法。 2、getPreferences(int) – 如果你的整个Activity只需要一个Preferences,因此你不需要提供键名。使用这种方法。 写入Value值的方式: 1、使用edit()方法得到一个 SharedPreferences.Editor对象。 2、通过类似putBoolean() 和 putString() 的方法添加值。 3、将编辑器的值和SharedPreferences对象的值相关联。 读取Value值,通过SharedPreferences类的方法,比如getBoolean() 和 getString() 。 示例代码:

{String PREFS_NAME = “MyPrefsFile”;(Bundle state){super.onCreate(state);. . .// Restore preferencesSharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);boolean silent = settings.getBoolean(“silentMode”, false);setSilent(silent);}(){super.onStop();// We need an Editor object to make preference changes.// All objects are from android.context.ContextSharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);SharedPreferences.Editor editor = settings.edit();editor.putBoolean(“silentMode”, mSilentMode);// Commit the edits!editor.commit();}}

二、使用Internal Storage 你可以直接将数据存储在内部存储里,但一般情况下,内部存储的数据对于本程序是私有的,其他程序是无法访问到的,也就是说当本程序被卸载时,该数据会一起被移除。我们一般将内部文件放在Data/data/相应的应用目录。 创建或者向内部存储写入一个文档的过程如下: 1、调用openFileOutput()方法,参数是文件名字和类型,返回一个FileOutputStream对象。 2、用write()写入文档 3、用close()关闭文档 示例代码:

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。 如果我们有读取一个内容固定不变的文件,可以在编译的时候,在R.raw目录下保存你想要访问的文件,然后调用 openRawResource(),参数是R.raw.,返回一个 InputStream 对象,通过这个流,读取你想要读取的内容。(但是你不可以对这个文件进行写入操作。) 保存临时文件 如果你并不想永久的保存某些数据,你可以通过调用getCaheDir()方法,在系统目录里创建打开一个文件,用来保存临时数据。方法返回值是保存临时文件的路径。 当系统的内部存储快满了时,系统会自动清理临时文件,但是你不能依靠系统自动来清理临时文件,需要自己设置临时文件的大小上限,定时删除临时文件。当使用者卸载应用时,,临时数据都会被删除。 其他有用的方法 getFilesDir() 得到保存文件的绝对路径。 getDir() 创建或者打开一个存在的内部存储文件。 deleteFile() 删除一个保存在内部存储的文件。 fileList() 返回应用的目录下的文件的清单。

三、使用外部存储 任何一个Android兼容性的手机都支持共享你保存在“外部存储”的文件。所谓”外部存储“,既可以保存在可移除的SD卡,也包含不可移除的内部存储里。而且当我们通过USB连接电脑时,我们可以修改这些文件。 注意:当我们在电脑上加载外部存储时,手机内不可访问相应的文件。存储在外部存储的文件不受安全性保护,用户可以任意的增加修改或者删除该文件。 访问到外部存储 你必须拥有 READ_EXTERNAL_STORAGE 或 WRITE_EXTERNAL_STORAGE 权限,才能访问或写入外部存储的文件。 在工程的Manifest.xml里修改:

<manifest …><uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />…</manifest>

当我们既想读取又想写入时,只需要得到 WRITE_EXTERNAL_STORAGE 权限就可以。 注意:从4.4版本后,如果只是访问和写入对本应用私有的文件,不需要获得上述权限。 检查媒体的可用性 在我们使用外部存储的文件之前,都必须检查文件的可用性,即文件是否只读,隐藏或者其他状态。我们会用getExternalStorageState(),返回一个String对象。通过将String值与MEDIA_MOUNTED,MEDIA_MOUNTED_READ_ONLY等来确认当前文件的状态。下面提供了两种检查文件的可用性的方法:

/* Checks */public boolean isExternalStorageWritable() {String state = Environment.getExternalStorageState();if (Environment.MEDIA_MOUNTED.equals(state)) {return true;} return false;}/* Checks if external storage is available to at least read */public boolean isExternalStorageReadable() {String state = Environment.getExternalStorageState();if (Environment.MEDIA_MOUNTED.equals(state) ||Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {return true;} return false;}只想到处流浪人生就像一场旅行,不必在乎目的地,

【Android API Guides 简译(三)】Data Storage

相关文章:

你感兴趣的文章:

标签云: