SharedPreferences
類別提供一個通用的框架,讓你可以儲存key-value格式的永久性資料到Android裝置上。你可以使用SharedPreferences
存放基本型態的資料,如:布林值(boolean)、浮點數(float)、整數(int)、長整數(long)和字串(String)等等。這些資料在你的程式結束執行時是會被存放下來(即使是該應用程式已經被kill了)。
SharedPreferences
儲存資料的方式為Key-Value格式。
要在應用程式當中取得SharedPreferences
物件來存取資料,有兩個方式:
- getSharedPreferences() - 如果你打算分開存放多個檔案資料的話,這個方法可以讓你指定要存放的檔案名稱(透過第一個參數)。
- getPreferences() - 這個方式只能使用一個檔案來存放資料,因為他無法指定你要存放資料的檔案名稱。
在呼叫getSharedPreferences()
需要傳入兩個參數,第一個參數為存放在手機上的檔案名稱,而第二個參數和呼叫getPreferences()
方法的第一個參數一樣,皆為該檔案的分享模式。
當getSharedPreferences()
沒有給第二個參數時,預設模式將為MODE_PRIVATE
。
分享模式如下:
MODE_PRIVATE | 該檔案是私有的,其它應用程式都無法存取(預設值)。 |
MODE_APPEND | 當該檔案存在時,資料會從後面繼續寫入,否則就建立新檔案。 |
MODE_WORLD_READABLE | 裝置內的其它應用程式都可以讀取。 |
MODE_WORLD_WRITEABLE | 裝置內的應用程式都可以寫入。 |
MODE_MULTI_PROCESS | 為一個旗標,在Android 2.3及以前,該旗標預設為開啟,允許多個行程同時存取同一個SharedPrecferences物件。而之後的Android版本,必須透過明確的將值設定後才能開啟多個行程的存取。 |
模式也可以混用,例如:getSharedPreferences("aaronlife", MODE_WORLD_READABLE + MODE_WORLD_WRITEABLE);為允許其它程式讀取與寫入。
寫入資料:
- 呼叫
edit()
方法來取得SharedPreferences.Editor
物件。 - 將要寫入的資料透過呼叫方法來存入,如:
putString()
、putInt()
。 - 呼叫
commit()
來交付資料。
讀出資料
根據要讀回的資料類型使用SharedPreferences
物件方法像:getString()
、getInt()
來讀回資料。
public class Calc extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state) { super.onCreate(state); . . . // 恢復preferences資料 SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop() { super.onStop(); // 要改變SharedPreferences裡面資料時都必須透過Editor物件 SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); // Commit the edits! editor.commit(); } }
SharedPreferences
常用方法:
方法名稱 | 描述 |
---|---|
boolean contains(String key) | 檢查preferences是否包含某個key的值。 |
SharedPreferences.Editor edit() | 建立SharedPreferences.Editor物件讓你可以透過它寫入資料到preferences。 |
Map | 從preferences中取回所有的資料。 |
boolean getBoolean(String key, boolean defValue) | 從preferences取回布林值 |
float getFloat(String key, float defValue) | 從preferences取回浮點數值 |
int getInt(String key, int defValue) | 從preferences取回整數值 |
long getLong(String key, long defValue) | 從preferences取回長整數值 |
String getString(String key, String defValue) | 從preferences取回字串值 |
Set | 從preferences取回字串Set值 |
SharedPreferences.Editor
常用方法:
方法名稱 | 描述 |
---|---|
void apply() | 從這個Editore交付你的修改給SharedPreferences物件,該次修改才算生效。 |
SharedPreferences.Editor clear() | 告訴Editor要清除所有preferences內的資料。 |
boolean commit() | 從這個Editore交付你的修改給SharedPreferences物件,該次修改才算生效。 |
SharedPreferences.Editor putBoolean(String key, boolean value) | 加入一個布林值到Editor中;必須呼叫commit() 或apply() 方法後寫入才會生效。 |
SharedPreferences.Editor putFloat(String key, float value) | 加入一個浮點數值到Editor中;必須呼叫commit() 或apply() 方法後寫入才會生效。 |
SharedPreferences.Editor putInt(String key, int value) | 加入一個整數值到Editor中;必須呼叫commit() 或apply() 方法後寫入才會生效。 |
SharedPreferences.Editor putLong(String key, long value) | 加入一個長整數值到Editor中;必須呼叫commit() 或apply() 方法後寫入才會生效。 |
SharedPreferences.Editor putString(String key, String value) | 加入一個字串值到Editor中;必須呼叫commit() 或apply() 方法後寫入才會生效。 |
SharedPreferences.Editor putStringSet(String key, Set | 加入一個字串Set值到Editor中;必須呼叫commit() 或apply() 方法後寫入才會生效。 |
SharedPreferences.Editor remove(String key) | 告訴Editor要刪除某個key的資料,必須等到呼叫commit() 或apply 提交資料後該刪除才會生效。 |
注意
- 只要修改到
SharedPreferences
物件內任何資料後都一定要呼叫commit()
或apply()
,該修改才會真正的被更新到SharedPreferences
內。SharedPreferences
完整方法可以參考Android開發者網站:SharedPreferences
Commit會直接寫入磁碟,而Apply會先緩衝等到適當時機再進行寫入,因此Apply效能較好,但Commit較不容易漏掉資料。