1. 程式人生 > >Android SharedPreferences儲存詳解

Android SharedPreferences儲存詳解

什麼是SharedPreferences儲存

  • 一種輕量級的資料儲存方式
  • 類似於我們常用的ini檔案,用來儲存應用程式的一些屬 性設定、較簡單的引數設定
  • 儲存現場:儲存使用者所作的修改或者自定義引數設定, 當再次啟動程式後回覆上次退出時的狀態。
  • 將NVP(Name/Value Pair,名稱/值對)儲存在Android 的檔案系統中(XML檔案),完全遮蔽的對檔案系統的 操作過程。
  • 開發人員僅是通過呼叫SharedPreferences的API對NVP 進行儲存和讀取
  • 除資料儲存,還提供資料共享功能。
  • 主要支援3種資料訪問模式(讀寫許可權) • 私有(MODE_PRIVATE):僅建立程式可讀、寫 • 全域性讀(MODE_WORLD_READABLE)
    :建立程式可讀 寫, 其他程式可讀不可寫 • 全域性寫(MODE_WORLD_WRITEABLE):建立程式和 其他程式都可寫,但不可讀!

程式碼demo

public static final String PREFERENCE_PACKAGE ="edu.hrbeu.SimplePreferenceDemo";
public static int MODE = Context.MODE_WORLD_READABLE +Context.MODE_WORLD_WRITEABLE;
public static final String PREFERENCE_NAME = "SaveSetting"
; public void onCreate(Bundle savedInstanceState) { Context c = null; try { //獲取SimplePreferenceDemo示例的Context c = this.createPackageContext(PREFERENCE_PACKAGE, Context.CONTEXT_IGNORE_SECURITY); } catch (NameNotFoundException e) {e.printStackTrace();} //將正確的SharedPreferences名稱傳遞給函式 SharedPreferences sharedPreferences =
c.getSharedPreferences( PREFERENCE_NAME, MODE ); //讀取NVP String name = sharedPreferences.getString("Name","Tom"); int age = sharedPreferences.getInt("Age", 20); float height = sharedPreferences.getFloat("Height",); }

使用方法

1. 定義訪問模式

public static int MODE = MODE_PRIVATE
//定義為私有模式
public static int MODE = Context.MODE_WORLD_READABLE +
Context.MODE_WORLD_WRITEABLE
//訪問模式可組合:既可以全域性讀,也可以全域性寫,將兩種模式組合(+號或|號) 成下面的方式:

2. 定義SharedPreferences的名稱

  • 該名稱與Android檔案系統中儲存的XML檔案同名
  • (儲存在:/data/data/<應用名>/shared_prefs/)
  • 相同名稱的NVP內容,都會儲存在同一個檔案中
public static final String PREFERENCE_NAME = "SaveSetting";

3. 建立SharedPreferences物件

將訪問模式和名稱作為引數,傳遞到getSharedPreferences()函式,並獲得SharedPreferences物件

SharedPreferences sharedPreferences =
getSharedPreferences ( PREFERENCE_NAME, MODE );

4.儲存和修改

  • 通過SharedPreferences.Editor類進行修改
  • 呼叫commit()函式儲存修改內容 – 支援資料型別:整型、 布林型、 浮點型和長整型等
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("Name", "Tom");
editor.putInt("Age", 20);
editor.putFloat("Height", (float)163.00 );
editor.commit();

5.讀取資料

  • 通過get()函式獲取NVP – 第1個引數是NVP的名稱(Name) – 第2個引數是在無法獲取到數值的時候使用的預設值
SharedPreferences sharedPreferences =
getSharedPreferences(PREFERENCE_NAME, MODE);
String name = sharedPreferences.getString("Name","Default Name");
int age = sharedPreferences.getInt("Age", 20);

6.資料儲存位置

在android studio 下方的logcat欄的最右邊有一個Device File Explorer可以檢視 虛擬機器的檔案

在這裡插入圖片描述

檔案儲存在以下目錄

/data/data/<package name>/shared_prefs/

7. 共享條件

  • 共享者需要將SharedPreferences的訪問模式設定為全域性讀或 全域性寫
  • 訪問者需要知道共享者的包名稱和SharedPreferences的名稱, 以通過Context獲得SharedPreferences物件
  • 訪問者需要確切知道每個資料的名稱和資料型別,用以正確 讀取資料