SharedPreferences

一種key-value的儲存模式

最簡單的方式使用getPreferences(),取得當前默認Activity的Preference。

// 在Activity中使用getPreferences
val sharedPref = getPreferences(Context.MODE_PRIVATE)

// 或者 在Fragment使用
val sharedPref = activity.getPreferences(Context.MODE_PRIVATE)

基本上參數都用Context.MODE_PRIVATE,

其他參數MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE有安全性漏洞不建議使用,
因為讓外界App能夠隨意存取既不合理又危險!

指定Preferences

基本上就是Preferences會儲存成不同的名稱 "指定名稱.xml",

可以讓。

val sharedPref = getSharedPreferences(指定名稱, Context.MODE_PRIVATE)

寫入

然後讀寫的getPreferences都一樣,
寫入需要edit(),然後範例我用的是putString用來存字串。

除了字串型態外,還有Boolean, Float, Int, Long, StringSet。
呼叫的方法名稱跟putString一樣,型態前面加put。(Ex: putInt(Key值, Int值))

然後最後就跟Fragment的Transaction結尾一樣都要commit(),

但無特殊需求建議都用apply()。

commit()和apply() 主要差異是同步和異步寫入,

commit()會將資料直接寫入慢速I/O(SD卡or ROM);

apply()則是將資料暫存,系統會自動在認為適合的時間內寫入慢速I/O。

fun saveMessage(msg: String) {
    val sharedPref = getPreferences(Context.MODE_PRIVATE)
    val editor = sharedPref.edit()

    // putString(string_key , string_value)
    sharedPref.edit().apply{
        // ...更多的put方法
        putString(getString(R.string.saved_message), msg)
        editor.apply() // 或 editor.commit()
    }
}

讀取

讀取preferences內儲存的字串,就用getString(key值, 如果沒有正確取得就回傳的字串)

對應寫入的方法有getBoolean(),getInt()等等的取值方法。

fun readMessage(): String {
    val sharedPref = getPreferences(Context.MODE_PRIVATE)
    val defaultString = "No saved message"

    return sharedPref.getString(getString(R.string.saved_message), defaultString)
}

參考資料

https://developer.android.com/reference/android/content/SharedPreferences.html

results matching ""

    No results matching ""