SharePreferences是用来存储一些简单配置信息的一种机制,使用Map数据结构来存储数据,以键值对的方式存储,采用了XML格式将数据存储到设备中,路径为:/data/data/<package name>/shared_prefs。

只能在同一个包内使用,不能在不同的包之间使用

实现SharedPreferences存储的步骤如下:

1、根据Context获取SharedPreferences对象:

  SharedPreferences sp = getSharedPreferences(FileName, Activity.MODE_PRIVATE); 

2、利用edit()方法获取Editor对象:

  Editor editor = sp.edit();

3、通过Editor对象操作key-value键值对数据:

插入数据:调用Editor.putxxxx方法,两个参数分别为键和值。

获取数据:调用Editor.getxxxx方法,两个参数分别为键和不存在指定键时的默认值。

删除数据:调用Editor.remove方法,参数为指定的键。

清空所有数据:调用Editor.clear方法

4、通过commit()方法提交数据:

  上述所有方法调用都必须执行Editor.commit方法来提交。

获取SharedPreferences的三种方式:

  • getSharedPreferences(name, mode):是Context类中的方法,可被同一应用程序下的其他组件共享
  • getPreferences():是Activity类中的方法,只需指定mode,只能在该Activity中使用.
  • getDefaultSharedPreferences():是PreferenceManager类中方法,存储每个应用的默认偏好设置

SharedPreferences的四种操作模式:

  • Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问
  • Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件
  • Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
  • Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入.

例子:将数据保存至SharedPreferences:

SharedPreferences preferences = getSharedPreferences("user",Context.MODE_PRIVATE);
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");

重要方法

  • public abstract boolean contains (String key) :检查是否已存在该文件,其中key是xml的文件名。
  • edit():为preferences创建一个编辑器Editor,可以修改preferences里面的数据,但必须执行commit()方法。
  • getAll():返回preferences里面的多有数据。
  • getXxx(String key, boolean defValue):获取Xxx(Boolean/Float/Int/Long/String)型数据
  • registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener listener):注册一个当preference发生改变时被调用的回调函数。
  • unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener listener):删除当前回调函数。

一般都是创建一个单独的文件(implements SharedPreferences)来统一处理。