1. 程式人生 > >使用SharedPreferences進行數據存儲

使用SharedPreferences進行數據存儲

lin 表示 class 輕量 white www pub 操作 margin

Android中存在著5種存儲數據的方法:

1、使用SharePreferences存儲數據

2、文件存儲

3、SQLite數據庫存儲

4、使用ContentProvider存儲數據

5、網絡存儲

這裏只介紹SharePreferences的存儲。

SharePreferences類是一個輕量級的存儲類,特別適合用於保存軟件配置參數。使用SharedPreferences保存數據,其背後是用xml文件存放數據。在Android系統中,SharedPreferences中的信息以XML文件的形式保存在 /data/data/PACKAGE_NAME/shared_prefs目錄下。這種方式主要用來存儲比較簡單的一些數據,而且是標準的Boolean、Int、Float、Long、String等類型

。當你定義好SharedPreferences類存儲文件的名字後無需考慮存儲文件的後綴問題,因為Android系統會自動將你命名的文件後面加上.xml。例如:如果我的存儲數據的文件名字是"user",那麽,當我使用

SharedPreferences preferences=getSharedPreferences("user",Context.MODE_PRIVATE);來存儲時,在程序中將自動生成一個名為user.xml的文件。

SharedPreferences數據的四種操作模式

  • Context.MODE_PRIVATE
  • Context.MODE_APPEND
  • Context.MODE_WORLD_READABLE
  • Context.MODE_WORLD_WRITEABLE
Context.MODE_PRIVATE:為默認操作模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容 Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件. Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應用是否有權限讀寫該文件 MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取. MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入

獲取SharedPreferences的三種方式:

android.content.SharedPreferences是一個接口,用來獲取和修改持久化存儲的數據。

1.this.getPreferences (int mode)——調用Activity對象的getPreferences()方法
通過Activity對象獲取,獲取的是本Activity私有的Preference,保存在系統中的xml形式的文件的名稱為這個Activity的名字,因此一個Activity只能有一個,屬於這個Activity。
2.this.getSharedPreferences (String name, int mode)——調用Context對象的getSharedPreferences()方法
因為Activity繼承了ContextWrapper,因此也是通過Activity對象獲取,但是屬於整個應用程序,可以有多個,以第一參數的name為文件名保存在系統中。
3.PreferenceManager.getDefaultSharedPreferences(this);

PreferenceManager的靜態函數,保存PreferenceActivity中的設置,屬於整個應用程序,但是只有一個,Android會根據包名和PreferenceActivity的布局文件來起一個名字保存。

前兩種方式的區別: 調用Context對象的getSharedPreferences()方法獲得的SharedPreferences對象可以被同一應用程序下的其他組件共享. 調用Activity對象的getPreferences()方法獲得的SharedPreferences對象只能在該Activity中使用.

用法

  存

SharedPreferences preferences=getSharedPreferences("user",Context.MODE_PRIVATE);//user表示存儲文件的名字
Editor editor=preferences.edit();
String name="xixi";
String age="22";
editor.putString("name", name);
editor.putString("age", age);
editor.commit();

  取

從SharedPreferences中取數據

SharedPreferences preferences=getSharedPreferences("user", Context.MODE_PRIVATE);
String name=preferences.getString("name", "defaultname");
String age=preferences.getString("age", "0");

  刪除

SharedPreferences pref = getSharedPreferences("user",Context.MODE_PRIVATE);
Editor editor = pref.edit();
editor.remove("name");
editor.commit();

有時因為程序需要我們可以把sharedPreferences單獨寫成一個工具類:

 1 /**
 2  * 保存數據應用 配置的集合類
 3  */
 4 public class SharedPreferencesUtil {
 5     public static final String SETTING_FILE = "boxue_userInfo";
 6 
 7     /**
 8      * 保存設置項到文件
 9      */
10     public static void saveToFile(Context context, String key, String value) {
11         SharedPreferences pref = context.getSharedPreferences(SETTING_FILE,
12                 android.content.Context.MODE_PRIVATE);
13         Editor editor = pref.edit();
14         editor.putString(key, value);
15         editor.commit();
16     }
17 
18     /**
19      * 刪除
20      */
21     public static void deleteToFile(Context context, String key) {
22         SharedPreferences pref = context.getSharedPreferences(SETTING_FILE,
23                 android.content.Context.MODE_PRIVATE);
24         Editor editor = pref.edit();
25         editor.remove(key);
26         editor.commit();
27     }
28 
29     public static boolean isContains(Context context, String key) {
30         SharedPreferences pref = context.getSharedPreferences(SETTING_FILE,
31                 android.content.Context.MODE_PRIVATE);
32         if (pref.contains(key)) {
33             return true;
34         } else {
35             return false;
36         }
37     }
38 
39     /**
40      * 獲取設置項
41      */
42     public static String getFromFile(Context context, String key) {
43         SharedPreferences pref = context.getSharedPreferences(SETTING_FILE,
44                 android.content.Context.MODE_PRIVATE);
45         return pref.getString(key, "");
46     }

使用SharedPreferences進行數據存儲