一、SharedPreferences和Editor简介
1. 简介
SharedPreferences是一种轻量级的数据存储方式,采用键值对的存储方式。
2. 特点
SharedPreferences只能存储少量数据,大量数据不能使用该方式存储,支持存储的数据类型有booleans, floats, ints, longs, and strings。
3. 路径
SharedPreferences存储到一个XML文件中的,路径在/data/data/<packagename>/shared_prefs/
下,文件名以及存储后面详细讲述。
4. 使用场景介绍
首次启动引导页、自动登录、记住密码、推送消息开关等。
5. Editor
用来执行SharedPreferences的保存数据功能。
二、SharedPreferences使用
1. SharedPreferences对象创建
要想使用 SharedPreferences 来存储数据,首先需要获取到 SharedPreferences 对象。Android中主要提供了三种方法用于得到 SharedPreferences 对象。
- Context 类中的 getSharedPreferences()方法 此方法接收两个参数,
- 第一个参数用于指定 SharedPreferences 文件的名称,如果指定的文件不存在则会创建一个SharedPreferences 文件都是存放在/data/data/<package name>/shared_prefs/目录下的。
- 第二个参数用于指定操作模式,主要有两种模式可以选 择,MODE_PRIVATE 和 MODE_MULTI_PROCESS。
注意:
MODE_PRIVATE 仍然是默认的操作模式,和直接传入0 效果是相同的,表示只有当前的应用程序才可以对这个 SharedPreferences 文件进行读写。MODE_MULTI_PROCESS 则一般是用于会有多个进程中 对同一个 SharedPreferences 文件进行读写的情况。
类似地,MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 这两种模式已在 Android 4.2 版本中被废弃。
- Activity 类中的 getPreferences()方法这个方法和 Context 中的 getSharedPreferences()方法很相似,不过它只接收一个操 作模式参数,因为使用这个方法时会自动将当前活动的类名作为 SharedPreferences 的文 件名。
- PreferenceManager 类中的 getDefaultSharedPreferences()方法 这是一个静态方法,它接收一个 Context 参数,并自动使用当前应用程序的包名作为前缀来命名 SharedPreferences 文件。
2. SharedPreferences保存数据
得到了 SharedPreferences 对象之后,就可以开始向 SharedPreferences 文件中存储数据了, 主要可以分为三步实现。
①调用 SharedPreferences 对象的 edit()方法来获取一个 SharedPreferences.Editor 对象。
②向 SharedPreferences.Editor 对象中添加数据,比如添加一个布尔型数据就使用putBoolean 方法,添加一个字符串则使用 putString()方法,以此类推。
③调用 commit()方法将添加的数据提交,从而完成数据存储操作。
向editor对象里写入数据,使用的是像Map一样的方法写入键值对,调用一堆 putXX()的方法。
editor.putInt("year", year);
editor.putString(“name”,”张三”);
editor.putBoolean(“isMarried”,false);
写完以后,需要提交editor。
editor.commit();
这样就可以将数据写进咱们的Sharedpreferences中了
3. SharedPreferences 读取数据
上文将咱们的数据通过Editor保存以后,咱们用什么方式获取它们呢?
保存的数据直接通过以下:
①先获取SharedPreferencesshared 的对象
SharedPreferencesshared Preferences= getSharedPreferences("test", Activity.MODE_PRIVATE);
②使用 getXXX 方法依次获得value,注意第2个参数是value的默认值
int year=sharedPreferences.getInt(“year”,2016);
String name =sharedPreferences.getString("name", "");
boolean isMarried=sharedPreferences.getBoolean(“isMarried”,false);
三、封装sp工具类
public class SharedPreferencesUtil {
/**
* 保存在手机里面的文件名
*/
private static final String FILE_NAME = "share_date";
/**
* 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法
*
* @param context
* @param key
* @param object
*/
public static void setParam(Context context, String key, Object object) {
String type = object.getClass().getSimpleName();
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
if ("String".equals(type)) {
editor.putString(key, (String) object);
} else if ("Integer".equals(type)) {
editor.putInt(key, (Integer) object);
} else if ("Boolean".equals(type)) {
editor.putBoolean(key, (Boolean) object);
} else if ("Float".equals(type)) {
editor.putFloat(key, (Float) object);
} else if ("Long".equals(type)) {
editor.putLong(key, (Long) object);
}
editor.commit();
}
/**
* 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值
*
* @param context
* @param key
* @param defaultObject
* @return
*/
public static Object getParam(Context context, String key, Object defaultObject) {
String type = defaultObject.getClass().getSimpleName();
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
if ("String".equals(type)) {
return sp.getString(key, (String) defaultObject);
} else if ("Integer".equals(type)) {
return sp.getInt(key, (Integer) defaultObject);
} else if ("Boolean".equals(type)) {
return sp.getBoolean(key, (Boolean) defaultObject);
} else if ("Float".equals(type)) {
return sp.getFloat(key, (Float) defaultObject);
} else if ("Long".equals(type)) {
return sp.getLong(key, (Long) defaultObject);
}
return null;
}
}
网友评论