在Android的應用程式中,如果想要儲存資料的話,一般可以透過資料庫的方式來儲存資料。
但如果儲存的資料是非常簡單的,例如:帳號、應用程式的設定值等,就可以使用SharedPreferences類別來儲存。
SharedPreferences是Android的一個介面,可以在Activity、Service等類別中呼叫getSharedPreferences(String, Int)方法來取得物件。
其中第一個參數代表設定檔的名稱,以字串型別表示
第二個參數則代表設定檔的存取權限,以Int型別表示。至於權限,則如下所示:
- Context.MODE_PRIVATE:只允許這個應用程式存取
- Context.MODE_MULTI_PROCESS:允許多個行程(Process)同時存取這個設定檔
- Context.MODE_WORLD_READABLE:允許所有的APP都能讀取這個設定檔
- Context.MODE_WORLD_WRITEABLE:允許所有的APP都能讀取、寫入這個設定檔
一般最常使用的權限就是Context.MODE_PRIVATE了。
至於Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE,因為風險性太高,所以官方在API 17開始就不建議使用。
另外,SharedPreferences可以儲存的資料型別如下:
- boolean
- Float
- Int
- Long
- String
使用方法
讀取資料部分:
val mPreferences = getSharedPreference("LOGIN_DATA", Context.MODE_PRIVATE)
//讀取資料
val savedUsername = mPreferences.getString("USER_NAME", "")
存入資料部分:
val mPreferences = getSharedPreference("LOGIN_DATA", Context.MODE_PRIVATE)
//存入資料
mPreferences.edit().putString("USER_NAME", "abcd1234").apply()
刪除資料部分:
val mPreferences = getSharedPreference("LOGIN_DATA", Context.MODE_PRIVATE)
//刪除
mPreferences.edit().remove("USER_NAME").apply()
額外補充
通常我會為了增加複用性,使用單例封裝,讓所有的類別都能呼叫,如下:
object AppSetting {
private val pref = MyApplication.getAppContext().
getSharedPreference("APP_DATA", Context.MODE_PRIVATE)
var userName: String
get() = pref.getString("USER_NAME", "")
set(value) = pref.edit().putString("USER_NAME", value).apply()
}