1. 介紹:SharedPreferences 的作用是使用鍵值對的方式存儲數據。且支持多種不同的數據類型存儲;
Android數據持久化方法中最簡單的一種,即使用Preferences的鍵值對存儲方式。這種方式主要用來存儲比較簡單的一些數據, 而且是標准的Boolean、Int、Float、Long、String等類型。
android.content.SharedPreferences是一個接口,用來獲取和修改持久化存儲的數據。
有三種獲取系統中保存的持久化數據的方式:
a).this.getPreferences (int mode)
通過Activity對象獲取,獲取的是本Activity私有的Preference,保存在系統中的xml形式的文件的名稱為這個Activity的名字,因此一個Activity只能有一個,屬於這個Activity。
b).this.getSharedPreferences (String name, int mode)
因為Activity繼承了ContextWrapper,因此也是通過Activity對象獲取,但是屬於整個應用程序,可以有多個,以第一參數的name為文件名保存在系統中。
c).PreferenceManager.getDefaultSharedPreferences(this);
PreferenceManager的靜態函數,保存PreferenceActivity中的設置,屬於整個應用程序,但是只有一個,Android會根據包名和PreferenceActivity的布局文件來起一個名字保存。
安卓中主要使用了三種方法用於得到SharePreferences對象。本結主要介紹conext類中的getSharedPreferences()方法。
2. 獲取到SharedPreferences對象后,就可以向文件中寫數據,或者從中讀數據;主要分為三步實現:
a) 調用SharedPreferences對象的edit()方法來獲取一個SharePreferences.Editor對象。
b) 向SharePreferences.Editor對象中添加數據,比如添加一個string類型,就使用putString()方法;
c) 調用commit()方法將添加的數據提交,從而完成數據的存儲操作。
3. 下面舉例說明數據的存儲於讀取。
定義了兩個button, 一個用於觸發存儲數據, 一個用戶觸發讀數據;
package com.exmple.xxx.sharepreferencestest;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button button;
private Button restoreBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = getSharedPreferences("testData", MODE_PRIVATE).edit();
editor.putString("name", "leavescy");
editor.putInt("age", 24);
editor.putBoolean("married", false);
editor.commit();
}
});
restoreBtn = findViewById(R.id.restoreBtn);
restoreBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences pref = getSharedPreferences("testData", MODE_PRIVATE);
String name = pref.getString("name", "");
int age = pref.getInt("age", 0);
boolean married = pref.getBoolean("married", false);
Log.i("MainActivity", "name is " + name);
Log.i("MainActivity", "age is " + age);
Log.i("MainActivity", "married is " + married);
}
});
}
}

在點擊SAVE DATA button后, 會將數據存儲到
打開testData, 數據為:
此時發現存儲的數據確實是以鍵值對的方式存儲了,且存儲為xml格式;
點擊Restore Data button時, 數據被讀出來,並打印出日志:
