1 介绍
SharedPreferences 是 Android 平台上一个轻量级的存储辅助类,用来保存应用的一些常用配置
1.1 可存储的数据类型
SharedPreferences 可存储的数据类型有:
- 存储四种基本类型数据(int,float,long,boolean)+ String+Bitmap+序列化实体类
- List类型的数据:List< String>,List< JavaBean>
- Map<K, V>集合
SharedPreferences最终数据是以xml形式进行存储,文件都是存放在
/data/data//shared_prefs/目录下的,在模拟器上可以看见该文件;在真机上,需要对真机root后,才能看到该文件。
1.2 SharedPreferences 权限
-
MODE_PRIVATE:默认操作模式,和直接传0效果相同,表示只有当前应用程序才可以对这个 SharedPreferences
文件进行读写。 -
MODE_WORLD_READABLE:指定此 SharedPreferences 对其他程序只读且无法修改。
-
MODE_WORLD_WRITEABLE:指定此 SharedPreferences 能被其他程序读写。
-
MODE_MULTI_PROCESS:Android2.3之后已经弃之不用了。
2 具体使用方式
2.1 存储四种基本类型数据
存储四种基本类型数据(int,float,long,boolean)+ String+Bitmap+序列化实体类
/**
* 保存在手机里面的文件名
*/
public static final String FILE_NAME = "share_data";
/**
* 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法
*
* @param context
* @param key
* @param object
*/
public static void put(Context context, String key, Object object) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
if (object instanceof String) {
editor.putString(key, (String) object);
} else if (object instanceof Integer) {
editor.putInt(key, (Integer) object);
} else if (object instanceof Boolean) {
editor.putBoolean(key, (Boolean) object);
} else if (object instanceof Float) {
editor.putFloat(key, (Float) object);
} else if (object instanceof Long) {
editor.putLong(key, (Long) object);
} else if (object instanceof Bitmap) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
((Bitmap) object).compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
String headPicBase64 = new String(Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT));
editor.putString(key, headPicBase64);
} else if (object instanceof Serializable) {
// obj必须实现Serializable接口,否则会出问题
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(object);
String string64 = new String(Base64.encode(baos.toByteArray(), 0));
editor.putString(key, string64);
} catch (IOException e) {
e.printStackTrace();
}
} else {
editor.putString(key, object.toString());
}
SharedPreferencesCompat.apply(editor);
}
读取存储的四种基本类型数据(int,float,long,boolean)+ String+Bitmap+序列化实体类
/**
* 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值
*
* @param context
* @param key
* @param defaultObject
* @return
*/
public static Object get(Context context, String key, Object defaultObject) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
Context.MODE_PRIVATE);
if (defaultObject instanceof String) {
return sp.getString(key, (String) defaultObject);
} else if (defaultObject instanceof Integer) {
return sp.getInt(key, (Integer) defaultObject);
} else if (defaultObject instanceof Boolean) {
return sp.getBoolean(key, (Boolean) defaultObject);
} else if (defaultObject instanceof Float) {
return sp.getFloat(key, (Float) defaultObject);
} else if (defaultObject instanceof Long) {
return sp.getLong(key, (Long) defaultObject);
} else if (defaultObject instanceof Bitmap) {
String headPic = sp.getString(key, "");
if (headPic != "") {
byte[] bytes = Base64.decode(headPic.getBytes(),