Android 資料存放區
Android提供了多種可選的方式讓你永久地儲存應用程式的資料。方案的選擇取決於你的特殊需要,如資料是否需要對你的應用程式是私人的或者可以被其他應用程式(或使用者)訪問,還有你需要多大的儲存空間。
資料存放區方案由以下幾種:
Shared Preferences
以鍵-值對的形式儲存私人的原始類型的資料
Internal Storage
將私人資料儲存在裝置的儲存區中
External Storage
將共用資料儲存在共用外部儲存區中
SQLite Databases
將結構化的資料儲存在私人的資料庫中
Network Connection
將資料儲存在你的web伺服器中
Android也提供了一種可以對其他應用程式暴露私人資料的方式——通過 content provider. content provider 是一個可選的用於供其他應用程式讀寫你的應用程式資料的組件,取決於你要暴露哪些資料。想要獲得更多的關於 content provider的資訊,請參考文檔 Content Providers 。
Shared Preferences
通過以下兩種方式的任何一種可以獲得你的應用程式的 Shared Preferences 對象。
· getSharedPreferences() - 如果你需要多個用名字標識的 preferences 你可以用這個方法,通過第一個參數來指定需要的 preferences 。
· getPreferences() -如果你的 Activity 只需要一個 preferences 檔案,你就可以使用這個方法。因為該方法得到的 preferences 檔案將會是 Activity 中唯一的 preferences,你不需要提供一個名字。
寫入值:
1. 調用 edit() t獲得一個 SharedPreferences.Editor對象。
2. 通過 putBoolean() 和 putString()等方法寫入值。
3. 通過 commit()方法提交修改後的資料。
通過 SharedPreferences 的 getBoolean() 和 getString()等方法讀取其中的值。
下面是一個使用 : SharedPreferences 的例子:
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();
}
}
Internal Storage
你可以直接把檔案儲存到裝置的內部儲存中。預設地,儲存到內部儲存中的檔案對你的應用是私人的,其他應用程式(或使用者)不能夠訪問它們。當使用者卸載掉你的程式後,這些檔案就被刪除了。
建立並寫入私人檔案到內部儲存中:
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, and MODE_WORLD_WRITEABLE.
從內部儲存空間讀取檔案:
1. 調用 openFileInput() 方法並傳入要讀取的檔案的名字。該方法返回一個 FileInputStream 。
2. 從檔案讀取位元組 read().
3. 關閉流 close().
提示:如果你想要在編譯時間在你的應用程式中儲存一個靜態檔案,你可以將該檔案存放在 res/raw/目錄下。你可以通過 openRawResource()來開啟該檔案通過傳入 R.raw. 資源ID.該方法返回一個 InputStream ,你可以通過該輸入資料流來讀取你的檔案(但是不能寫入到原始檔案)。
儲存快取檔案
如果你想緩衝一些資料而不是永久地儲存它們,你應該用 getCacheDir()方法來開啟一個代表你的應用程式存放臨時快取檔案的內部目錄的File對象。
當你的裝置內部儲存空間不足時,Android 可能會刪除這些快取檔案以恢複空間。然而,你不應該依賴於系統去為你清除這些檔案。你應該始終自己去維護這些快取檔案並且使它們保持在一個合理的空間消耗大小範圍內,例如 1MB.當使用者卸載你的應用時,這些檔案也將被刪除。
其他常用方法:
getFilesDir()
擷取你的內部檔案在檔案系統上儲存的絕對路徑。
getDir()
建立(如果存在則開啟)你的內部儲存空間的目錄。
deleteFile()
刪除內部儲存中儲存的一個檔案。
fileList()
以檔案數組的形式返回你的應用儲存的檔案。