Android SharedPreferences的理解與使用
1、獲取SharedPreferences:
要想使用 SharedPreferences 來存儲數據,首先需要獲取到 SharedPreferences 對象。Android中主要提供了三種方法用於得到 SharedPreferences 對象。
1. Context 類中的 getSharedPreferences()方法:
此方法接收兩個參數,第一個參數用於指定 SharedPreferences 文件的名稱,如果指定的文件不存在則會創建一個,第二個參數用於指定操作模式,主要有以下幾種模式可以選擇。MODE_PRIVATE 是默認的操作模式,和直接傳入 0 效果是相同的。
MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 這兩種模式已在 Android 4.2 版本中被廢棄。
Context.MODE_PRIVATE: 指定該SharedPreferences數據只能被本應用程序讀、寫;
Context.MODE_WORLD_READABLE: 指定該SharedPreferences數據能被其他應用程序讀,但不能寫;
Context.MODE_WORLD_WRITEABLE: 指定該SharedPreferences數據能被其他應用程序讀;
Context.MODE_APPEND:該模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件;
2. Activity 類中的 getPreferences()方法:
這個方法和 Context 中的 getSharedPreferences()方法很相似,不過它只接收一個操作模式參數,因為使用這個方法時會自動將當前活動的類名作為 SharedPreferences 的文件名。
3. PreferenceManager 類中的 getDefaultSharedPreferences()方法:
這是一個靜態方法,它接收一個 Context 參數,並自動使用當前應用程序的包名作為前綴來命名 SharedPreferences 文件。
2.SharedPreferences的使用
SharedPreferences對象本身只能獲取數據而不支持存儲和修改,存儲修改是通過SharedPreferences.edit()獲取的內部接口Editor對象實現。使用Preference來存取數據,用到了SharedPreferences接口和SharedPreferences的一個內部接口SharedPreferences.Editor,這兩個接口在android.content包中;
1)寫入數據: //步驟1:創建一個SharedPreferences對象 SharedPreferences sharedPreferences= getSharedPreferences("data",Context.MODE_PRIVATE); //步驟2: 實例化SharedPreferences.Editor對象 SharedPreferences.Editor editor = sharedPreferences.edit(); //步驟3:將獲取過來的值放入文件 editor.putString("name", “Tom”); editor.putInt("age", 28); editor.putBoolean("marrid",false); //步驟4:提交 editor.commit(); 2)讀取數據: SharedPreferences sharedPreferences= getSharedPreferences("data", Context .MODE_PRIVATE); String userId=sharedPreferences.getString("name",""); 3)刪除指定數據 editor.remove("name"); editor.commit(); 4)清空數據 editor.clear(); editor.commit();
注意:如果在 Fragment 中使用SharedPreferences 時,需要放在onAttach(Activity activity)里面進行SharedPreferences的初始化,否則會報空指針 即 getActivity()會可能返回null !
讀寫其他應用的SharedPreferences 步驟如下(未實踐):
1. 在創建SharedPreferences時,指定MODE_WORLD_READABLE模式,表明該 SharedPreferences數據可以被其他程序讀取;
2. 創建其他應用程序對應的Context;
3. 使用其他程序的Context獲取對應的SharedPreferences;
4. 如果是寫入數據,使用Editor接口即可,所有其他操作均和前面一致;