Android入門教程 | SharedPreferences 簡介

Android_anzi發表於2021-12-14

有時候我們想在應用中儲存一些資料。比如一些配置資訊。 例如儲存int,float,boolean,字串這類的資料。

寫檔案可能會比較繁瑣。需要自己實現檔案讀寫操作,定義資料存放結構。 對於這些簡單的資料,我們可以用 SharedPreferences (下文或簡稱sp)來進行儲存。

sp 使用的是 key-value 型別的資料結構。之前接觸到的 json格式也是 key-value 型別的。

存資料

第一步是獲取到一個 SharedPreferences 物件。在Activity中,可以呼叫 getSharedPreferences(String name, int mode)方法。需要傳入這個sp的名字。

private static final String SP_1 = "sp_1";getSharedPreferences(SP_1, Context.MODE_PRIVATE)

存入各項資料。int有對應的 putInt方法。同理,boolean、float、long、String、StringSet都有對應的put方法。 也簡寫為 putXxx方法。

private void saveParams() {
    Set<String> set = new HashSet<>();    set.add("R");    set.add("u");    set.add("s");    set.add("t");
    getSharedPreferences(SP_1, Context.MODE_PRIVATE).edit()
            .putInt(K_1, 1000)
            .putBoolean(K_2, true)
            .putFloat(K_3, 3.14159f)
            .putLong(K_4, System.currentTimeMillis())
            .putString(K_5, "RustFisher")
            .putStringSet(K_6, set)
            .apply();
}

最後呼叫  apply() 方法,把資料寫入。 注意 apply()方法,它並不保證立刻把資料寫入。它是一個非同步的方法。

commit()是一個同步方法。它會在當前執行緒立刻執行。

官方推薦使用 apply()來儲存資訊。

執行到機器上。如果資料儲存成功,在as的Device File Explorer皮膚中,我們可以找到檔案 /data/data/com.rustfisher.tutorial2020/shared_prefs/sp_1.xml

使用sp,會在應用內部的 shared_prefs目錄建立xml檔案。

執行示例工程,我們可以看到 shared_prefs目錄有別的庫建立的sp檔案。 例如 BuglySdkInfos.xmlx5_proxy_setting.xml等等。

<pre id="__code_2" style="box-sizing: inherit; color: var(--md-code-fg-color); font-feature-settings: &quot;kern&quot;; font-family: &quot;Roboto Mono&quot;, SFMono-Regular, Consolas, Menlo, monospace; direction: ltr; position: relative; margin: 1em 0px; line-height: 1.4;">`<?xml version='1.0' encoding='utf-8' standalone='yes' ?><map>
    <int name="k1" value="1000" />
    <boolean name="k2" value="true" />
    <float name="k3" value="3.14159" />
    <long name="k4" value="1605628186953" />
    <string name="k5">RustFisher</string>
    <set name="k6">
        <string>R</string>
        <string>s</string>
        <string>t</string>
        <string>u</string>
    </set></map>

可看出它儲存使用的是xml檔案,外圍標籤是 <map>

讀資料

存入資料後,我們可以把資料讀出來。和 putXxx方法類似,sp提供了 getXxx方法。

例如 int getInt(String key, int defValue);方法。 後面的defValue是預設值。如果這個key沒有對應的int,則返回預設值defValue。

  • getInt
  • getBoolean
  • getFloat
  • getLong
  • getString
  • getStringSet

下面程式碼是把資料讀出,並且顯示出來。

private void readParams() {
    SharedPreferences sp = getSharedPreferences(SP_1, Context.MODE_PRIVATE);
    StringBuilder sb = new StringBuilder();
    sb.append(K_1).append(": ").append(sp.getInt(K_1, -1));
    sb.append("\n").append(K_2).append(": ").append(sp.getBoolean(K_2, false));
    sb.append("\n").append(K_3).append(": ").append(sp.getFloat(K_3, -1));
    sb.append("\n").append(K_4).append(": ").append(sp.getLong(K_4, -1));
    sb.append("\n").append(K_5).append(": ").append(sp.getString(K_5, "none"));
    sb.append("\n").append(K_6).append(": ").append(sp.getStringSet(K_6, null));
    mTv1.setText(sb.toString());
}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70008155/viewspace-2847755/,如需轉載,請註明出處,否則將追究法律責任。

相關文章