天天看點

SharedPreferences 儲存使用者設定

原文位址:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059133.html

參考demo位址:http://download.csdn.net/detail/youmingyu/9723681

很多時候我們開發的軟體需要向使用者提供軟體參數設定功能,例如我們常用的QQ,使用者可以設定是否允許陌生人添加自己為好友。對于軟體配置參數的儲存,如果是window軟體通常我們會采用ini檔案進行儲存,如果是j2se應用,我們會采用properties屬性檔案或者xml進行儲存。如果是Android應用,我們采用什麼方式儲存軟體配置參數呢?

Android平台給我們提供了一個SharedPreferences類,它是一個輕量級的存儲類,特别适合用于儲存軟體配置參數。使用SharedPreferences儲存資料,其背後是用xml檔案存放資料,檔案存放在/data/data//shared_prefs目錄下。

儲存參數

SharedPreferences sharedPreferences = getSharedPreferences("WindHelm033", Context.MODE_PRIVATE);
Editor editor = sharedPreferences.edit();//擷取編輯器
editor.putString("name", "風盔");
editor.putInt("age", );
editor.commit();//送出修改
           

生成的WindHelm033.xml檔案内容如下:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
   <string name="name">風盔</string>
   <int name="age" value="25" />
</map>
           

getSharedPreferences(name,mode)方法的第一個參數用于指定參數檔案的名稱,名稱不用帶字尾,字尾會由Android自動加上。

方法的第二個參數指定檔案的操作模式,共有四種操作模式。

  • Context.MODE_PRIVATE:為預設操作模式,代表該檔案是私有資料,隻能被應用本身通路,在該模式下,寫入的内容會覆寫原檔案的内容。
  • Context.MODE_APPEND:模式會檢查檔案是否存在,存在就往檔案追加内容,否則就建立新檔案。
  • Context.MODE_WORLD_READABLE:表示目前檔案可以被其他應用讀取。
  • Context.MODE_WORLD_WRITEABLE:表示目前檔案可以被其他應用寫入。

另外Activity還提供了另一個getPreferences(mode)方法操作SharedPreferences,這個方法預設使用目前類不帶包名的類名作為檔案的名稱。

通路參數

SharedPreferences sharedPreferences=getSharedPreferences("WindHelm033",Context.MODE_PRIVATE);
//getString()第二個參數為預設值,如果preference中不存在該key,将傳回預設值
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age", );
           

通路其他應用的參數

前提條件是該應用的的preference建立時指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE權限。

然後需要建立其他應用的Context,再通過Context 通路preference ,通路preference時會在應用所在包下的shared_prefs目錄找到preference檔案:

Context otherAppsContext = createPackageContext("fk.androiddemo_032", Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences("WindHelm032", Context.MODE_WORLD_READABLE);
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age", );
           

如果不通過建立Context通路其他應用的preference,也可以以讀取xml檔案方式直接通路其他應用preference對應的xml檔案,如:

File xmlFile = new File("/data/data/fk.windhelm_032/shared_prefs/WindHelm032.xml");
           

繼續閱讀