前言:
SharedPreferences作为Android五大存储方式之一,其具有以下特点:
- 使用简单、快捷、方便。
- 只支持存储Java基础数据类型(Boolean、Int、Float、String、Long等)不支持自定义数据类型。
- 本质是一种Map,通过键值对的形式进行数据存储。
- 不支持查找功能。
使用方法:
存储数据:
//两个参数,参数一:理解为文件名 参数二:文件权限模式 PRIVATE可读可写
SharedPreferences sharedPreferences = getSharedPreferences("ZerGen", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("name", "ZerGen");
editor.putInt("age", 21);
//提交保存数据
editor.commit();
除了可以使用editor.commit()方法提交数据之外,还可以使用editor.apply()方法。
apply()是为了解决APP线程卡顿导致数据提交失败的情况,使用了apply()方法后,Android系统本身会在一个合适的时间提交保存数据。缺点在于没法确保什么时间提交。
权限模式:
MODE_PRIVATE:默认模式,允许被本应用程序访问,可读可写,写入内容覆盖。
MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
MODE_WORLD_READABLE:其他应用程序也拥有读出的权利。
MODE_WORLD_WRITEABLE:其他应用程序也拥有写入的权利。
另一种写法:
因为editor.putXXX()方法会返回一个Editor对象,所以Put数据的时候可以使用下面的方法:
editor.putString("name", "ZerGen").putInt("age",21).commit();
错误写法,切记切记!!:
SharedPreferences sharedPreferences = getSharedPreferences("ZerGen", Context.MODE_PRIVATE);
sharedPreferences.edit().putString("name", "ZerGen");
sharedPreferences.edit().putInt("age", 21);
sharedPreferences.edit().commit();
如果按照这样的写法,数据是会存储失败。
因为sharedPreferences.edit()方法每次都会返回一个新的Editor对象,Editor实现类里边会有一个缓冲的Map,提交数据的时候会把这个缓冲的Map复制到内存中的Map,然后内存中的Map把数据存储到XML文件中,每一个新的Editor对象都有一个空的Map,所以最终无法存储成功。
取出数据:
SharedPreferences取出数据使用的是Key-Value的形式。
String name = sharedPreferences.getString("name",null);
int age = sharedPreferences.getInt("age",0);
Log.e("TAG", "name is :" + name + ",age is:" + age);
运行效果:
E/TAG: name is :ZerGen,age is:21