Android开发中经常需要保存一些用户配置信息,一般都会保存在SharePreference当中。
但是每次都用getSharedPreferences太麻烦了。
我在项目中对SharePreference的频率操作封装在一个类中。
在使用时不需要传入Context和key,保存的时候只需要传入值,获取时不需要传入key。
/**
* SharePreference基类
* 这里只写了对最常用的三种基本数据类型的操作。
*/
public class BasePreference {
private Context context;
private SharedPreferences sp;
private SharedPreferences.Editor editor;
private String FILE_NAME = "userinfo";
protected BasePreference(Context context) {
this.context = context;
sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
}
protected void setString(String key, String value) {
sp.edit().putString(key, value).apply();
}
protected String getString(String key) {
return sp.getString(key, null);
}
protected void setBoolean(String key, boolean value) {
sp.edit().putBoolean(key, value).apply();
}
protected boolean getBoolean(String key) {
return sp.getBoolean(key, false);
}
protected void setInt(String key, int value) {
sp.edit().putInt(key, value).apply();
}
protected int getInt(String key) {
return sp.getInt(key, 0);
}
}
然后创建一个子类,实现此基类
/**
* 具体实现sp
* Created by Dujuncan on 2016/10/30.
*/
public class PreferenceUtils extends BasePreference {
private static PreferenceUtils preferenceUtils;
/**
* 需要增加key就在这里新建
*/
//用户名的key
private String USER_NAME = "user_name";
//是否首次启动的key
private String FIRST_LAUNCH = "first_launch";
private PreferenceUtils(Context context) {
super(context);
}
/**
* 这里我通过自定义的Application来获取Context对象,所以在获取preferenceUtils时不需要传入Context。
* @return
*/
public synchronized static PreferenceUtils getInstance() {
if (null == preferenceUtils) {
preferenceUtils = new PreferenceUtils(MyApplication.getInstance());
}
return preferenceUtils;
}
public void setFirstLaunch(boolean isFirst) {
setBoolean(FIRST_LAUNCH,isFirst);
}
public boolean getFirstlaunch() {
return getBoolean(FIRST_LAUNCH);
}
public void setUserName(String name) {
setString("fefe", name);
}
public String getUSER_NAME_KEY() {
return getString(USER_NAME);
}
}
最后在Activity中使用
PreferenceUtils preferenceUtils = PreferenceUtils.getInstance();
preferenceUtils.setFirstLaunch(true);
String userName = preferenceUtils.getUserName();