1.SharedPreferences简介
SharedPreferences 是 Android 平台为应用开发者提供的一个轻量级的存储辅助类,用来保存应用的一些常用配置,它提供了 putString()、putString(Set<String>)、putInt()、putLong()、putFloat()、putBoolean() 六种数据类型。数据最终是以 XML 形式进行存储,产生的文件保存在/data/data/应用包名/shared_prefs目录下,是日常开发非常常用的一个数据存储类。
常用于:比如我们要保存一个用户是否第一次进入软件、用户的账号、是否勾选了保存密码等等这一类比较简单的信息。
注意事项:可以看到图中,所有数据在手机root情况下,进入文件夹,都是一展无遗的,所以如果有重要的数据最好是进行加密后再存储
其文件内容如图:
2.SharedPreferences使用方法
2.1实例化
SharedPreferences的实例化也有几种不同的方法,比如
- Context类中的getSharedPreferences()方法
- Activity类中的getPreferences()方法
- PreferenceManager 类中的 getDefaultSharedPreferences()方法
这里我们主要讲最常用的Context类中的getSharedPreferences()方法。
/*
需要传入两个参数:
name:
也就是你保存到/data/data/应用包名/shared_prefs目录下的文件的名字
mode:操作模式
MODE_PRIVATE: 保存的数据只能被本应用读、写;
MODE_WORLD_READABLE: 保存的数据能被其他应用程序读,但不能写;
MODE_WORLD_WRITEABLE: 保存的数据能被其他应用程序读写;
MODE_APPEND:检查文件是否存在,存在就往文件加内容,不存在就创建新文件;
*/
SharedPreferences sharedPreferences = getSharedPreferences("filename", MODE_PRIVATE);
2.2Editor
光有SharedPreferences对象是不能进行数据保存的,需要一个SharedPreferences.Editor对象才能对数据进行插入保存,所以我们还需要实例化一个Editor。
SharedPreferences.Editor editor = sharedPreferences.edit();
2.3存储数据
有了Editor,我们就能进行存储数据了,可以存储的数据类型也是多达6种:String、int、boolean、float、long还有Set< String > ,所有的数据都是以键值对(key-value)的形式存入到文件中,只需要调用Editor的 .putXxxx() 方法,传入 key 和你需要存储的数据即可。
editor.putString("string", "abc");
editor.putInt("int", 123);
editor.putFloat("float", 0.001f);
editor.putBoolean("boolean", true);
editor.putLong("long", 123123);
editor.putStringSet("str_set", Set<String>);
2.4提交保存
put了数据还只是相当于在半路中,想要真正把数据保存下来,还需要进行一个提交,这里的提交又有两种方法:
- .apply() 无返回值,简单理解成 异步提交
- .commit() 有返回值(返回true代表存储成功,否则存储失败),简单理解成 同步提交
所以一般情况下我们是优先选择 .apply() 方法进行提交保存数据的。
editor.apply();
2.4SharedPreferences获取数据
保存了数据,那么怎么获取?获取的话相比保存数据而言要稍微简单那么一丢丢,获取是不需要Editor对象的,直接使用SharedPreferences对象调用 .getXxxx() 方法,传入你之前保存数据时传入的 key ,然后再传入一个未获取到数据时应用的 默认值 即可获取数据。
/*defValue默认值
获取数据时,需要传入 key ,和一个 defValue ,这个默认值,就是当你的key没有找到相应的 key 时,那么就会返回这个 defValue。
*/
sharedPreferences.getString("string","");
sharedPreferences.getInt("string",0);
sharedPreferences.getFloat("string",0);
sharedPreferences.getBoolean("string",false);
sharedPreferences.getLong("string",0);
sharedPreferences.getStringSet("string", Set<String>());