[Android]SharedPreferences資料儲存
阿新 • • 發佈:2018-12-24
應用
Android開發中,需要將少量簡單型別的資料儲存在本地,比如幾個字串,一般選擇使用SharedPreferences來儲存。
SharedPreferences:一個輕量級的儲存類,特別適合用於儲存軟體配置引數。使用xml檔案存放資料,檔案存放在/data/data/<package name>/shared_prefs。可以儲存的資料型別有:int、boolean、float、long、String、StringSet。
儲存資料
- 使用Activity類的getSharedPreferences方法獲得SharedPreferences物件;
- 使用SharedPreferences介面的edit獲得SharedPreferences.Editor物件;
- 通過SharedPreferences.Editor介面的putXXX方法儲存key-value對;
- 通過過SharedPreferences.Editor介面的commit(或apply)方法儲存key-value對。
讀取資料
- 使用Activity類的getSharedPreferences方法獲得SharedPreferences物件;
- 通過SharedPreferences物件的getXXX方法獲取資料。
獲取SharedPreferences物件:
public SharedPreferences getSharedPreferences (String name, int mode);
name: 自定義命名
mode: 模式
MODE_PRIVATE 只能被自己的應用程式訪問
MODE_WORLD_READABLE 可以被自己的應用程式和其它應用程式讀取
MODE_WORLD_WRITEABLE 可以被自己的應用程式和其它應用程式讀取和寫入
當Activity只需要建立一個SharedPreferences物件時,可以使用getPreferences方法
public SharedPreferences getPreferences (int mode);
獲取Editor物件:
SharedPreferences.Editor edit = mSharedPre.edit( );
寫入資料:
edit. putXXX ( key , value);
移除指定key的資料:
edit.remove(key);
清空資料:
edit.clear();
提交資料:
edit.commit();//或Edit.apply
edit.apply 和 edit.commit區別:
- apply沒有返回值,commit返回boolean 表明是否提交成功。
- apply將修改資料原子提交到記憶體,然後非同步提交到硬體磁碟。Commit 是同步提交。前者效率更高。
提交資料:
edit. getXXX ( key , defValue);
SharedPreferences 存取 List
以下封裝了SharedPreferences 儲存、讀取、刪除List集合資料的方法。
public class SharedPreferenceUtil {
public static final String SHARED_KEY = "shared_key";
private static int MAX_LIST_SIZE = 10;
private Context mContext;
private Activity mActivity;
SharedPreferences mSharedPreferences;
public SharedPreferenceUtil(Context mContext, Activity mActivity) {
this.mContext = mContext;
this.mActivity = mActivity;
getCurSharedPreferences();
}
private SharedPreferences getCurSharedPreferences() {
mSharedPreferences = mActivity.getPreferences(mContext.MODE_PRIVATE);
return mSharedPreferences;
}
//移除一條資料
public void removeItem(String data) {
//首先獲取已經儲存的list
ArrayList<String> curList = getStringArrayPreference(SHARED_KEY);
//從集合中移出data
curList.remove(data);
//重新儲存list
setStringArrayPreference(SHARED_KEY, curList);
}
//新儲存一條資料
public void addItem(String data) {
int newMaxListSize;
ArrayList<String> newList = new ArrayList<>();
newList.add(data);
ArrayList<String> curList = getStringArrayPreference(SHARED_KEY);
if (curList.contains(data)) {
newMaxListSize = MAX_LIST_SIZE;
} else {
newMaxListSize = MAX_LIST_SIZE - 1;
}
for (int i = 0; i < Math.min(curList.size(), newMaxListSize); i++) {
if (!data.equals(curList.get(i))) {
newList.add(curList.get(i));
}
}
setStringArrayPreference(SHARED_KEY, newList);
}
//清空所有儲存的資料
public void clearAllData() {
SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.clear();
editor.apply();
}
public void setStringArrayPreference(String key, ArrayList<String> mList) {
SharedPreferences.Editor editor = mSharedPreferences.edit();
JSONArray mJSONArray = new JSONArray();
//將mList的內容存進mJSONArray中
for (int i = 0; i < mList.size(); i++) {
mJSONArray.put(mList.get(i));
}
//寫入資料
if (!mList.isEmpty()) {
editor.putString(key, mJSONArray.toString());
} else {
editor.putString(key, null);
}
//提交資料
editor.apply();
}
public ArrayList<String> getStringArrayPreference(String key) {
//讀取儲存的資料
String json = mSharedPreferences.getString(key, null);
ArrayList<String> mList = new ArrayList<>();
if (json != null) {
try {
JSONArray mJSONArray = new JSONArray(json);
//讀取儲存的內容並存進ArrayList陣列中
for (int i = 0; i < mJSONArray.length(); i++) {
String data = mJSONArray.optString(i);
mList.add(data);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
return mList;
}
}
END.