關於sharedPreference的總結

不少時候咱們開發的軟件須要向用戶提供軟件參數設置功能,例如咱們經常使用的 QQ,用戶能夠設置是否容許陌生人添加本身爲好友。對於軟件配置參數的保存,若是是 window軟件一般咱們會採用 ini文件進行保存,若是是 j2se應用,咱們會採用 properties屬性文件進行保存。若是是 Android應用,咱們最適合採用什麼方式保存軟件配置參數呢?
Android平臺給咱們提供了一個 SharedPreferences類,它是一個輕量級的存儲類,特別適合用於保存軟件配置參數。使用SharedPreferences保存數據,其背後是用 xml文件存放數據,文件存放在 /data/data/<package name>/shared_prefs目錄下:
SharedPreferences sharedPreferences = getSharedPreferences("zyj", Context.MODE_PRIVATE);
Editor editor = sharedPreferences.edit();//獲取編輯器
editor.putString("name", "老李 ");
editor.putInt("age", 4);
editor.commit();//提交修改
生成的 zyj.xml文件內容以下:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="name">老李 </string>
<int name="age" value="4" />
</map>
由於 SharedPreferences背後是使用 xml文件保存數據,getSharedPreferences(name,mode)方法的第一個參數用於指定該文件的名稱,名稱不用帶後綴,後綴會由 Android自動加上。方法的第二個參數指定文件的操做模式,共有四種操做模式,這四種模式前面介紹使用文件方式保存數據時已經講解過。若是但願 SharedPreferences背後使用的 xml文件能被其餘應用讀和寫,能夠指定定 Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE權限。
另外 Activity還提供了另外一個 getPreferences(mode)方法操做SharedPreferences,這個方法默認使用當前類不帶包名的類名做爲文件的名稱。
SharedPreferences其實用的是pull解釋器

訪問SharedPreferences中的數據代碼以下:
SharedPreferences sharedPreferences = getSharedPreferences("zyj", Context.MODE_PRIVATE);
//getString()第二個參數爲缺省值,若是 preference中不存在該 key,將返回缺省值
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age", 1);

若是訪問其餘應用中的Preference 前提條件是:
該preference建立時指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE權限。如:有個<package  name>com.jbridge.pres.activity的應用使用下面語句建立了 preference
getSharedPreferences("zyj", Context. MODE_WORLD_READABLE);
其餘應用要訪問上面應用的 preference,首先須要建立上面應用的 Context,而後經過 Context 訪問preference ,訪問preference時會在應用所在包下的 shared_prefs目錄找到 preference 
Context otherAppsContext = createPackageContext("com.jbridge.pres.activity", Context. CONTEXT_IGNORE_SECURITY );
SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences("zyj", Context.MODE_WORLD_READABLE);
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age", 0);
若是不經過建立 Context訪問其餘應用的 preference,能夠以讀取xml文件方式直接訪問其餘應用 preference對應的 xml文件,如:
File xmlFile = new File(「/data/data/<package name>/shared_prefs/zyj.xml」);//<package name>應替換成應用的包名

工程中的例子
private void fillUsernameAndPassword() {
String username = sp.getString("上次登陸", "");           <string name="上次登陸">.... </string>
                                                                       <string name="上次登陸">.... </string>             
if (!username.equals("")) {
String password = sp.getString(username, "");           <string name="某個用戶名">密碼 </string>
etLoginname.setText(username);
etPassword.setText(password);
}
}
相關文章
相關標籤/搜索