Android 資料存放區之_SharedPreferences

來源:互聯網
上載者:User


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對象。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.