簡單易用的安卓SharedPreferences儲存(資料儲存系列)

語言: CN / TW / HK

theme: channing-cyan

本文正在參加「金石計劃 . 瓜分6萬現金大獎」

前言

本篇主要介紹本人在工作最常用的資料儲存方法——haredPreferences儲存,即sp儲存,該方式儲存比較方便,用於儲存使用者本地持久化資料,使用過程中也出現過一些不好解決的坑,但不可否認,如果需求有一些需要APP本地儲存的資料,我還是會首選sp儲存,畢竟寫起來很容易(工作開發的專案程式碼已經將其簡化封裝為工具類,只要寫key和set方法與get方法即可呼叫,所以感覺很方便)。

正篇

SharedPreferences儲存概述

該儲存方式是使用鍵值對(key-value)進行儲存資料,換而言之,當我們想用其儲存一條資料,需要給這條資料提供一個對應的鍵(key),然後在讀取資料的時候就可以通過這個鍵(key)將相應的值(value)取出。

image.png 該儲存方式支援多種不同的資料型別儲存:

image.png

image.png 如上面兩個圖所示,該方法支援以下幾種資料型別:\ 1.int(整型)\ 2.long(長整型)\ 3.float(浮點型)\ 4.String(字串)\ 5.Set<String>(字串集合)\ 存入以上對應的型別,我們在取出時也會獲得同樣型別的資料。

使用方法

儲存資料

首先,我們看看sp儲存的存資料方法:\

1.getSharedPreferences()方法

image.png

image.png 這個方法是Context類提供的,該方法的第一個引數可以用來指定檔名稱,名稱不存在就會建立一個,Sp儲存檔案存放地址為/data/data/< package name >/shared_prefs/目錄下;它的第二個引數則是用於指定操作模式,不過只有MODE_PRIVATE這個預設模式可用,等於直接傳入0,這個模式意思是隻有當前程式才可以對這個Sp檔案進行讀寫。

2.getPreferences()方法

這個方法是Activity類中提供的:

image.png 這個方法只有一個引數,即操作模式,而且該方法會將當前的Activity類名直接作為Sp檔名,其他都和getSharedPreferences()方法相似。

使用例項:

佈局中我們加一個按鈕 XML佈局: ```XML

<Button
    android:id="@+id/saveButton"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:backgroundTint="@color/default_a"
    android:text="@string/save_data"/>

然後在Activity中在按鈕的點選事件時使用Sp儲存存入元素:Kotlin class SharedPreferencesDemo : AppCompatActivity() { lateinit var binding : ActivitySharedPreferencesDemoBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivitySharedPreferencesDemoBinding.inflate(layoutInflater)
    setContentView(binding.root)
    binding.saveButton.setOnClickListener {
        val editor = getSharedPreferences("data", Context.MODE_PRIVATE).edit()
        editor.putString("name", "Tom")
        editor.putInt("age", 18)
        editor.putBoolean("married", false)
        editor.apply()
    }
    //Demo
    val edit = getPreferences(Context.MODE_PRIVATE).edit()
    edit.putLong("id", 5555555)
    edit.apply()
}

} ``` 我們執行程式,然後按一下按鈕:

image.png

接著我們就可以在裝置檔案管理器中找到data.xml的檔案:

image.png

image.png 這就表示存下來了。

Sp檔案讀取資料方法

儲存資料的時候我們用了putXXX()的方法,去儲存了key-value型資料,所以取資料更為簡單,就是直接去對應型別的getXXX()方法傳入對應的key即可以取出該型別的資料,當然為了在找不到儲存值時有對應的資料獲取,我們在getXXX()的第二個引數中傳入預設值,如下所示:

image.png Kotlion binding.restoreButton.setOnClickListener { val prefs = getSharedPreferences("data", Context.MODE_PRIVATE) val name = prefs.getString("name", "") val age = prefs.getInt("age", 0) val married = prefs.getBoolean("married", false) Log.d("Main", "name is $name, age is $age, married is $married") } 這樣我們就能取出我們儲存的資料,非常簡單好用。

總結

雖然Sp儲存現在已經有更好的技術去替換(MMKV),但Sp儲存的原理還是需要我們去了解的,當然,作為安卓資料儲存技術,它還是需要我們去熟練使用,這篇文章主要就是簡單的介紹了Sp儲存的基本使用方法,如果需要深入瞭解,還是去閱讀原始碼最好,此外,後面我也會去學習MMKV,雖然目前接觸專案還沒有使用。