存储数据之SharedPreference

官方文档

SharePreferences类提供了一个通用框架,以便可以保存和检索原始数据类型的永久性键值对。你可使用SharedPreferences来保存任何原始数据类型:boolean,float,int,long,char和String,这些数据将会永久保存。javascript

要获取应用的应用的SharedPreferences对象,请使用一下两个方法:java

  1. getSharedPreferences()
  • 若是您须要多个按名称(使用第一个参数指定)识别的首选项文件,请使用此方法。
  1. getPreferences()
  • 若是您只须要一个用于 Activity 的首选项文件,请使用此方法。 因为这将是用于 Activity 的惟一首选项文件,所以无需提供名称。

写入值的话请按照如下步骤来:android

  1. 调用 edit() 以获取 SharedPreferences.Editor。
  2. 使用 putBoolean() 和 putString() 等方法添加值。
  3. 使用 commit() 提交新值

要读取值,请使用 getBoolean() 和 getString() 等 SharedPreferences 方法。多线程

如下是在计算器中保存静音按键模式首选项的示例: app

public class Calc extends Activity {
    public static final String PREFS_NAME = "MyPrefsFile";

    @Override
    protected void onCreate(Bundle state){
       super.onCreate(state);
       . . .

       // Restore preferences
       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
       boolean silent = settings.getBoolean("silentMode", false);
       setSilent(silent);
    }

    @Override
    protected void onStop(){
       super.onStop();

      // We need an Editor object to make preference changes.
      // All objects are from android.context.Context
      SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
      SharedPreferences.Editor editor = settings.edit();
      editor.putBoolean("silentMode", mSilentMode);

      // Commit the edits!
      editor.commit();
    }
}复制代码

SharedPreferences getPreferences (int mode)这个方法实际是对getSharedPreferences(String, int)方法的一个简单包装,传如参数默认为activity的类名。框架

SharedPreferences的使用方法

SharedPreferences是一个用于访问和修改用于访问和修改getSharedPreferences(String,int)返回的首选项数据的接口。 对于任何特定的首选项集合,全部客户端共享此类的单个实例。 对首选项的修改必须经过SharedPreferences.Editor对象进行,以确保首选项值保持在一致状态并在提交到存储时进行控制。 从各类get方法返回的对象必须被应用程序视为不可变的。异步

注意:此类不支持在多个进程中使用。编辑器

  1. boolean contains (String key)
    返回在SharedPreferences中是否包含传入key的值。包含返回true,不包含返回false。

例如sp.contains("foo"),将会检查是否包含key值为foo的存储键值对是否存在。ide

2.SharedPreferences.Editor edit ()工具

获取SharedPreferences的编辑工具,获取方法为
SharedPreferences.Editor edit=sp.edit()

注意:你必须调用commit()方法才能将你的改变的值真正存入到sp中。

3.Map getAll ()
返回一个map类型的全部的键值对。

注意:你不能直接编辑这个map。

4.Set getStringSet (String key,
Set defValues)

这个方法将会返回一个set集合,一样你也不能直接编辑这个集合。

SharedPreferences.Editor的使用方法

1.void apply ()

将编辑器中的SharedPreferences更改提交给正在编辑的SharedPreferences对象。这将原子地执行所请求的修改,替换当前在SharedPreferences中的任何内容。

当使用两个editor同时编辑时,最后一个调用的editoer将会覆盖前边调用的editor结果。

此方法与commit不一样,apply是将更改的内容当即提交到内存中的SharePreferences中,而后在异步任务中提交到磁盘存储,而且不会通知你是否成功或者失败。

假如此时一个编辑器执行常规的commit方法,而apply仍然未完成,则commit将会阻塞,等到apply彻底完成才会执行commit。

因为SharedPreferences实例是进程内的单例,若是你不关心返回值,那么可使用apply()替换任何commit()实例。

你不须要担忧Android组件生命周期及其与apply()写入磁盘的交互。该框架确保来自apply()的在线磁盘写入在切换状态以前完成。

不建议直接实现SharedPreferences.Editor接口。然而,若是你之前实现它,而且如今获得关于缺乏apply()的错误,你能够简单地调用apply()from commit()。

  1. SharedPreferences.Editor clear ()

在编辑器中标记以从首选项中删除全部值。 一旦commit 被调用,惟一剩余的SharedPreferences将是您在此编辑器中定义的东西何。

注意,当提交SharedPreferences项时,不管是在此编辑器上放置方法以前仍是以后调用clear,都会先清除。

3.boolean commit ()

将编辑器中的首选项更改提交回正在编辑的SharedPreferences对象。 这将原子地执行所请求的修改,替换当前在SharedPreferences中的任何内容。

注意,当两个编辑器同时修改首选项时,最后一个editor会覆盖前一个editor的commit。

若是你不关心返回值,而且你从应用程序的主线程使用它,请考虑使用apply()。

4.SharedPreferences.Editor remove (String key)

在editor中标记这个key的键值对将被删除,在commit中实际完成。

当提交给SharePreferences的时候,不管你在put以前仍是以后调用,remvove都会先执行。

关于我本身的几点建议:

  1. 如今网上大部分教程或者utils中,将SharedPreferences写成一个单利模式,其实我我的不建议这样作,彻底没有必要,editor的提交方法(apply和commit)都是原子操做,不会存在静态条件,同时官方文档也说明禁止在多线程中使用SharedPreferences。
  2. 有不少将Objec对象类存入SharedPreferences中的教程,我认为也没有必要,存入的自己就是键值对,要在一个值中存入一个对象有点不和厂里,也不建议这么作。
相关文章
相关标签/搜索