前言
android中我们经常用SharedPreferences来存储轻量级数据。
代码
public class SharedPreferencesUtils {
private SharedPreferences share;
private SharedPreferences.Editor editor;
private String SHARED_NAME = "spname";//sp的文件名 自定义
//MyAPP.getContext() 是你的Application里面的一个Context
private SharedPreferencesUtils() {
share = MyApp.getContext().getSharedPreferences(SHARED_NAME, Context.MODE_PRIVATE);
editor = share.edit();
}
/**
* 单例模式
*/
private static SharedPreferencesUtils instance;//单例模式 双重检查锁定
public static SharedPreferencesUtils getInstance() {
if (instance == null) {
synchronized (SharedPreferencesUtils.class) {
if (instance == null) {
instance = new SharedPreferencesUtils();
}
}
}
return instance;
}
/**
* ------- Int ---------
*/
public void putInt(String spName, int value) {
editor.putInt(spName, value);
editor.commit();
}
public int getInt(String spName, int defaultvalue) {
return share.getInt(spName, defaultvalue);
}
/**
* ------- String ---------
*/
public void putString(String spName, String value) {
editor.putString(spName, value);
editor.commit();
}
public String getString(String spName, String defaultvalue) {
return share.getString(spName, defaultvalue);
}
public String getString(String spName) {
return share.getString(spName, "");
}
/**
* ------- boolean ---------
*/
public void putBoolean(String key, boolean value) {
editor.putBoolean(key, value);
editor.commit();
}
public boolean getBoolean(String key, boolean defValue) {
return share.getBoolean(key, defValue);
}
/**
* ------- float ---------
*/
public void putFloat(String key, float value) {
editor.putFloat(key, value);
editor.commit();
}
public float getFloat(String key, float defValue) {
return share.getFloat(key, defValue);
}
/**
* ------- long ---------
*/
public void putLong(String key, long value) {
editor.putLong(key, value);
editor.commit();
}
public long getLong(String key, long defValue) {
return share.getLong(key, defValue);
}
/**
* 清空SP里所有数据 谨慎调用
*/
public void clear() {
editor.clear();//清空
editor.commit();//提交
}
/**
* 删除SP里指定key对应的数据项
*
* @param key
*/
public void remove(String key) {
editor.remove(key);//删除掉指定的值
editor.commit();//提交
}
/**
* 查看sp文件里面是否存在此 key
*
* @param key
* @return
*/
public boolean contains(String key) {
return share.contains(key);
}
//建议 所有的Key 以为常量的形式保存在此类里面
public static final String USER_NAME = "name";//例如
}
使用
写入:
SharedPreferencesUtils.getInstance().putString(SharedPreferencesUtils.USER_NAME, "abcd");
取出:
SharedPreferencesUtils.getInstance().getString(SharedPreferencesUtils.USER_NAME);
SharedPreferencesUtils.getInstance().getString(SharedPreferencesUtils.USER_NAME,"1234");//如果不存在此Key,就返回1234
说明
1.个人建议写成单例模式使用,其它的同步写入和异步写入就不多说了,一个从commit()同步提交写入,一个是apply()异步提交。如果您要求实时性高的读写,建议勇commit,如果是一般使用情况,就按照Android推荐的使用apply 异步提交吧。
2.Key建议已常量的形式保存,方便自己查看导入有那些Key存在sp文件里面,当然,也可以通过root之后的手机,查看到data文件夹下面的配置.xml文件看到。
3.建议进行加密处理,在写入的时候。明文存入的话,拥有root权限的手机可以查看到你sp文件里面的value。
4.单例模式可以改成静态内部类单例模式。