在所有應用程式中,都必然涉及資料的互動。有些時候,應用程式有少量的資料需要儲存,并且這些資料的格式很簡單。比如:軟體設定、使用者賬戶設定,使用者習慣設定等,這個時候就可以用到SharedPreferences。
因為SharedPreferences本身是一個接口,程式無法直接建立SharedPreferences的執行個體,隻能通過Context提供的getSharedPreferences(String name,int mode)方法來擷取SharedPreferences的執行個體。
public abstract SharedPreferences getSharedPreferences(String name,int mode)
第一個參數name為建立的檔案名稱,如設定了name為"SilverDemo",則生成的檔案名為:SilverDemo.xml。
第二個參數mode為int類型,此參數描述了建立的檔案的可見性。有如下值:
MODE_PRIVATE:指定此SharedPreferences隻有本程式可以通路。
MODE_WORLD_READABLE:指定此SharedPreferences對其他程式隻讀且無法修改。
MODE_WORLD_WRITEABLE:指定此SharedPreferences能被其他程式讀寫。
MODE_MULTI_PROCESS:Android2.3之後已經棄之不用了。
SharedPreferences儲存的資料主要是類似于配置資訊格式的資料,是以它儲存的資料主要是簡單類型的Key-value對。并且Value部分隻能是一些基本資料類型:boolean、float、int、long、String等。
SharedPreferences的常用方法:
boolean contains(String Key):判斷SharedPreferences是否包含特定Key的資料。
abstract Map<String,?> getAll():擷取SharedPreferences資料裡全部的Key-Value對。
boolean getXxx(String key,Xxx defValue):擷取SharedPreferences資料裡指定Key對應的value。如果該Key不存在,傳回預設值defValue。
SharedPreferences本身為接口類型,并沒有提供寫入資料的能力,而是通過SharedPreferences的内部接口實作寫入資料的能力。調用edit()方法即可擷取它所對應的Editor對象。
SharedPreferences.Editor的常用方法:
abstract SharedPreferences.Editor clear():清空SharedPreferences裡所有的資料。
abstract SharedPreferences.Editor putXxx(String key,xxx value):向SharedPreferences中插入指定的Key-Value對。
abstract SharedPreferences.Editor remove(String key):從SharedPreferences中移除指定Key的資料。
boolean commit():當Editor編輯完成後,調用該方法送出修改。
示例,簡單使用SharedPreferences實作存儲,頁面僅存在兩個Button控件,此處不附布局詳情。
<a></a>
建立的檔案總是儲存在根目錄的data/data/<package name>/shared_prefs目錄下。可以使用File Explorer工具檢視,此工具在Eclipse→windows→Show view→other,打開Show View視窗,選中File Explorer。

如圖所示,把此檔案導出到PC上,可以看到xml檔案中的内容為:
<code><?xml version=</code><code>'1.0'</code> <code>encoding=</code><code>'utf-8'</code> <code>standalone=</code><code>'yes'</code> <code>?></code>
<code><map></code>
<code><</code><code>int</code> <code>name=</code><code>"random"</code> <code>value=</code><code>"83"</code> <code>/></code>
<code><string name=</code><code>"time"</code><code>></code><code>2013</code><code>年</code><code>3</code><code>月</code><code>4</code><code>日</code><code>12</code><code>:</code><code>19</code><code>:</code><code>38</code><code></string></code>
<code></map></code>
在建立一個SharedPreferences的時候,如果需要讓别的應用程式也能通路到本程式的SharedPreferences,則在建立的時候指定MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE就可以了。在其他程式通路的時候,隻要能擷取到建立的程式的Context就可以通路了。
具體步驟:
需要建立其他程式對應的Context。使用Context.createPackageContext(String packageName, int flags)。
調用其他應用程式的Context的getSharedPerferences(String name,int mode)即可擷取相應的SharedPreferences對象。
其他操作與操作本程式的SharedPreferences一緻。
Context.createPackageContext(String packageName, int flags):根據包的名稱,傳回此包的Context。通過flags控制安全性:可選值:CONTEXT_INCLUDE_CODE 或 CONTEXT_IGNORE_SECURITY(常用).
實際上,開發者完全可以使用IO流的方式通路xml檔案,但是此方法過于繁瑣,沒有直接使用SharedPreferences來的簡潔明了。
本文轉自承香墨影部落格園部落格,原文連結:http://www.cnblogs.com/plokmju/archive/2013/03/14/2960365.html,如需轉載請自行聯系原作者