技術學習記錄

[Android]SharedPreferences

在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()
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *