SharedPreferences是 Android平台上一個輕量級的存儲類,主要是保存一些常用的配置比如窗口狀態,一些默認歡迎語 登錄的用戶名和密碼等。一般在Activity中 重載窗口狀態onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常規的Long長 整形、Int整形、String字符串型的保存。對於常規的輕量級而言比SQLite要好不少,如果真的存儲量不大可以考慮自己定義文件格式。xml 處理時Dalvik會通過自帶底層的本地XML
Parser解析,比如XMLpull方式,這樣對於內存資源占用比較好。
通過SharedPreferences可以將NVP(Name-value pair 名稱-值對【又稱鍵值對】)保存在android的文件系統中,而且通過SharedPreferences對文件系統的操作過程完全是屏蔽的。這樣僅需要通過調用SharedPreferences 對鍵值對很方便的進行保存和讀取。
在Android系統中,這些信息以XML文件的形式保存在 /data/data/PACKAGE_NAME /shared_prefs 目錄下。
SharedPreferences的使用非常簡單,能夠輕松的存放數據和讀取數據。 SharedPreferences只能保存簡單類型的數據,例如,String、int等。一般會將復雜類型的數據轉換成Base64編碼,然後將轉換 後的數據以字符串的形式保存在 XML文件中,再用SharedPreferences保存。
使用SharedPreferences保存key-value對的步驟如下:
(1)使用Activity類的getSharedPreferences方法獲得SharedPreferences對象,其中存儲key-value的文件的名稱由getSharedPreferences方法的第一個參數指定。
[java]view plaincopy
SharedPreferences loinPasswd = getSharedPreferences(NAPASS, MODE_PRIVATE);
// Context.MODE_PRIVATE 訪問模式
SharedPreferences 支持三中訪問模式
MODE_PRIVATE
MODE_WORLD_READABLE
MODE_WORLD_WRITEABLE
// file:SharedPreferences的名稱。這個名稱和anroid文件系統中保存的文件名同名。
(2)使用SharedPreferences接口的edit獲得SharedPreferences.Editor對象。
eg:
SharedPreferences.Editor loinpasswdedit = loinPasswd.edit();
(3)通過SharedPreferences.Editor接口的putXxx方法保存key-value對。其中Xxx表示不同的數據類型。例如:字符串類型的value需要用putString方法。
(4)通過SharedPreferences.Editor接口的commit方法保存key-value對。commit方法相當於數據庫事務中的提交(commit)操作。
loinpasswdedit.putString(NAME, etName.getText().toString());
loinpasswdedit.putString(PASSWD, "");
loinpasswdedit.commit();
具體代碼的書寫流程為:
A、存放數據信息
// 第一步 獲得SharedPreferences對象 如果存在則打開,如果不存在則創建。loinPasswd.xml
SharedPreferences loinPasswd = getSharedPreferences(NAPASS,
MODE_PRIVATE);
// 第二步 是對象可編輯,通過對象SharedPreferences.Editor
SharedPreferences.Editor loinpasswdedit = loinPasswd.edit();
// 第三步 SharedPreferences是通過鍵值對的形式存儲數據的,把值put到對應的鍵上。
loinpasswdedit.putString(NAME, etName.getText().toString());
loinpasswdedit.putString(PASSWD, etPassWd.getText()
.toString());
// 修改好 一定要提交
loinpasswdedit.commit();
B、讀取數據信息
// 第一步 獲得SharedPreferences對象 打開loinPasswd.xml文件
SharedPreferences loinpasswd = getSharedPreferences(NAPASS, 0);
// 第二步 根據鍵值對 把對應的值取出來
String name = loinpasswd.getString(NAME, "").toString();
String passwd = loinpasswd.getString(PASSWD, "").toString();
對應的數據保存在:
File Explorer /
/shared_prefs/loinPasswd.xml
主要代碼 具體如下(僅供參考):
public class MainActivity extends ActionBarActivity {
protected static final String NAPASS = "loinPasswd";
protected static final String NAME = "name";
protected static final String PASSWD = "passwd";
protected static final String TAG = "com.example.sharepreferences.MainActivity";
private static EditText etName;
private static EditText etPassWd;
private static CheckBox checkBox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etName = (EditText) findViewById(R.id.et_name);
etPassWd = (EditText) findViewById(R.id.et_passwd);
Button button = (Button) findViewById(R.id.bt_login);
checkBox = (CheckBox) findViewById(R.id.cb_rem);
// 得到name passwd
getlogininfo();
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (checkBox.isChecked()) {
// 保存數據到SharedPreferences
Log.i(TAG, "checkBox isClickable ");
// 第一步 獲得SharedPreferences對象 如果存在則打開,如果不存在則創建。loinPasswd.xml
SharedPreferences loinPasswd = getSharedPreferences(NAPASS,
MODE_PRIVATE);
// 第二步 是對象可編輯,通過對象SharedPreferences.Editor
SharedPreferences.Editor loinpasswdedit = loinPasswd.edit();
// 第三步 SharedPreferences是通過鍵值對的形式存儲數據的,把值put到對應的鍵上。
loinpasswdedit.putString(NAME, etName.getText().toString());
loinpasswdedit.putString(PASSWD, etPassWd.getText()
.toString());
// 修改好 一定要提交
loinpasswdedit.commit();
} else {
Log.i(TAG, "checkBox is not Clickable ");
SharedPreferences loinPasswd = getSharedPreferences(NAPASS,
MODE_PRIVATE);
SharedPreferences.Editor loinpasswdedit = loinPasswd.edit();
loinpasswdedit.putString(NAME, etName.getText().toString());
loinpasswdedit.putString(PASSWD, "");
loinpasswdedit.commit();
}
}
});
}
private void getlogininfo() {
// 得到數據從SharedPreferences
// 第一步 獲得SharedPreferences對象 打開loinPasswd.xml文件
SharedPreferences loinpasswd = getSharedPreferences(NAPASS, 0);
// 第二步 根據鍵值對 把對應的值取出來
String name = loinpasswd.getString(NAME, "").toString();
String passwd = loinpasswd.getString(PASSWD, "").toString();
etName.setText(name);
etPassWd.setText(passwd);
}
}
另外SharedPreferences 不僅能夠保存數據,還可以實現不同應用程序間的數據共享。
如果將SharedPreferences的訪問模式設置為全局讀或者全局寫。其他應用程序就可以讀或寫本應用的SharedPreferences數據。
訪問者要知道共享者的包名稱和SharedPreferences名稱。通過context獲得SharedPreferences對象。