SharedPreferences

所有的應用程序都必然涉及數據的輸入與輸出。在Android系統中,主要有五種數據存儲模式:

1 .Sharedferences:Sharedferences是一種輕型的數據存儲方式,本質上是基于XML文件存儲key-value鍵值對數據。通常用來存儲一些簡單的配置信息;

2 .File:使用文件進行數據存儲;

3 .SQLite:SQLite是一個輕量級的數據庫,存儲結構化的數據,支持基本SQL語法,是常被采用的一種數據存儲方式。Android為SQLite提供了一個名為SQLiteDatabase的類,封裝了一些CRUD操作的API;

4 .ContentProvider:ContentProvider為存儲和獲取數據提供統一的接口,可以在不同的應用程序之間共享數據;

5 .Network:使用基于網絡的服務獲取數據。

其中,前四種為本地數據持久化的存儲方式。

當應用程序只有少量數據需要保存,而且這些數據的格式很簡單,譬如都是String、Int、Long、Float和Boolean等簡單數據類型時,可以使用SharedPreferences來保存,常用于保存應用程序的各種配置信息(是否使用振動效果、字體大小等);

當應用程序只有少量數據需要保存,而且這些數據的格式比較復雜,可以使用普通文件保存;

當應用程序有大量數據需要存儲和訪問,就可以使用SQLite數據庫來保存。SQLite是一個真正輕量級的數據庫,它沒有后臺進程,整個數據庫就對應于一個文件;

當應用程序需要引用其他應用程序如多媒體播放、通訊錄等的數據時,可以使用ContentProvider來調用數據接口;

當應用程序需要的數據需要跨設備和持久保存,就不能保存在本地,而應該采用網絡服務器存儲數據。

本文主要講解SharedPreferences的使用與應用。

一. SharedPreferences的重要方法

1 . 讀取SharedPreferences數據的方法

方法描述

boolean contains (String key)判斷SharedPreferences是否包含特定key的數據。

abstract MapgetAll()獲取SharedPreferences數據中全部的鍵值對數據集合。

abstract Xxx getXxx(String key, Xxx defaultValue)獲取SharedPreferences數據里指定key對應的value。如果key不存在,則返回defaultValue。其中,Xxx可以是boolean、int、float、long、String。

abstract SetgetStringSet(String key, SetdefValues)獲取SharedPreferences數據中指定key對應的Set值。

2. 向SharedPreferences寫入數據的方法

SharedPreferences對象本身只能獲取數據而不支持存儲和修改,存儲修改是通過通過SharedPreferences的內部接口SharedPreferences.Editor實現的。SharedPreferences調用edit()方法即可獲取它對應的Editor對象。其中Editor對象向SharedPreferences寫入數據的方法如下:

方法描述

abstract SharedPreferences.Editor

putXxx(String key, Xxx value)向Editor對象存入指定key對應的value數據。其中,Xxx可以是boolean、int、float、long、String。

abstract SharedPreferences.Editor

clear()清空Editor對象中的數據。

abstract SharedPreferences.Editor

remove(String key)刪除Editor對象中指定的key對應的數據。

abstract SharedPreferences.Editor

putStringSet(String key, Setvalues)向Editor對象存入指定key對應的Set值。

abstract boolean commit()當Editor對象編輯完成后,調用該方法提交修改。

abstract void apply()提交Editor對象的修改。

二. 向SharedPreferences中存儲數據

SharedPreferences本身是一個接口,不能直接創建SharedPreferences實例,可以通過Context提供的getSharedPreferences(String name, int mode)方法來獲取SharedPreferences實例。其中,該方法中的mode參數可取的值有:

Context.MODE_PRIVATE:指定SharedPreferences數據只能被本應用程序讀、寫;

Context.MODE_WORLD_READABLE:指定SharedPreferences可被其他應用程序讀,但不能寫;

Context.MODE_WORLD_WRITABLE:指定SharedPreferences數據可被其他應用程序讀、寫。

實現SharedPreferences存儲的步驟如下:

1 . 創建SharedPreferences對象;

2 . 創建SharedPreferences.Editor對象,用于存儲數據修改;

3 . 通過Editor對象的putXxx()方法,存儲key-value對數據信息;

4 . 通過Editor對象的commit()方法提交對SharedPreferences的修改。

實例如下:

/*

* 創建SharedPreferences實例

* 其中"myPref"指SharedPreferences數據的XML文件名

* 指定該SharedPreferences數據只能被本應用程序讀寫

*/SharedPreferences pref = getSharedPreferences("myPref", MODE_PRIVATE);// 創建SharedPreferences.Editor對象,用于存儲數據修改SharedPreferences.Editor editor = pref.edit();// 存儲數據信息editor.putString("name","zhangsan");editor.putInt("age",22);editor.putLong("time", System.currentTimeMillis());editor.putBoolean("default",true);// 提交數據修改editor.commit();

這樣就完成了SharedPreferences的數據寫入了。

在Android Studio的DDMS中可以查看"myPref"XML文件信息。myPref.xml所在的文件目錄為 "/data/data/<包名>/shared_prefs/myPref.xml" 。DDMS的打開步驟如下:

"Tools"菜單 ->"Android"菜單 ->"Android Device Monitor"菜單,即可打開DDMS。

在DDMS中查看Android虛擬機下對應的"/data/data/<包名>/shared_prefs/myPref.xml",并導出myPref.xml至本地電腦中查看,可看到myPref.xml文件內容如下:

zhangsan

三. 讀取本應用程序的SharedPreferences

所有創建的SharedPreferences數據都可以被本應用訪問并進行讀寫操作。

實現SharedPreferences讀取的步驟如下:

1 . 獲取SharedPreferences對象;

2 . 獲取SharedPreferences中的數據。

// 1. 獲取SharedPreferences對象SharedPreferences pref = getSharedPreferences("myPref", MODE_PRIVATE);// 2. 取出數據String name = pref.getString("name","defaultName");Intage = pref.getInt("age",0);Longtime = pref.getLong("time",0);Booleandefault= pref.getBoolean("default",true);

四. 讀寫其他應用程序的SharedPreferences數據

要讀寫其他應用程序的SharedPreferences,前提是該應用程序的SharedPreferences需要指定相應權限,如Context.MODE_WORLD_READABLE(可讀,不可寫)、Context.MODE_WORLD_WRITABLE(可讀寫)。

假設要讀取的應用程序的的SharedPreferences數據具有Context.MODE_WORLD_WRITABLE權限。為了讀取該應用程序的的SharedPreferences,步驟如下:

第一步:創建其他應用程序對應的Context

創建其他應用程序對應的Context的方法如下:

createPackageContext(StringpackageName,intflags)

其中packageName為該應用程序的包名。flag表示該應用程序的安全限制標記。flag的取值如下:

CONTEXT_INCLUDE_CODE:可以執行程序包里的代碼;

CONTEXT_IGNORE_SECURITY:忽略安全警告;

CONTEXT_RESTRICTED:嚴格模式,可能導致一些特殊特性不可用;

示例:

otherAppContext= createPackageContext("cn.edu.sysu.ce.hope", Context.CONTEXT_IGNORE_SECURITY);

第2步:調用其它應用程序的Context的SharedPreferences對象

// 獲取SharedPreferences對象SharedPreferences pref = otherAppContext.getSharedPreferences("myPref", MODE_PRIVATE);

第3步:向SharedPreferences對象中讀寫數據

1 . 讀取數據:

String name = pref.getString("name","defaultName");Intage = pref.getInt("age",0);Longtime = pref.getLong("time",0);Booleandefault= pref.getBoolean("default",true);

2 . 寫入數據:

// 獲取SharedPreferences.Editor對象,用于存儲數據修改SharedPreferences.Editor editor = pref.edit();// 修改數據信息editor.putString("name","lisi");editor.putBoolean("isMale",true);// 提交數據修改editor.commit();

因為SharedPreferences的數據存儲格式就是一個XML文件,所以我們完全可以通過使用I/O流的方式讀取該XML文件,再通過XML解析來獲取數據。但是顯然,這種方式是很繁瑣,而是用SharedPreferences讀寫數據則簡單很多。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容