SharedPreferences 超强工具类
2016-07-14 10:58
453 查看
/** * PreferencesManager管理类,提供get和put方法来重写SharedPreferences所提供的方法 */ public class PreferencesManager { private final String tag = PreferencesManager.class.getSimpleName(); private Context mContext; private SharedPreferences preferences; // 默认系统SharedPreferences KEY值名称 private static String shareName = CommonConstant.PREFERENCES_SHARENAME; public static final String THEME = "Theme"; public static final String LANG = "Lang"; private static PreferencesManager instance; /** * 构造方法 * @param context */ private PreferencesManager(Context context) { this(context, shareName); } /** * 构造方法 * @param context * @param shareName */ private PreferencesManager(Context context, String shareName) { mContext = context; preferences = context.getSharedPreferences(shareName, Context.MODE_PRIVATE); } /** * 得到单例模式的PreferencesManager对象<br> * 方 法 名:getInstance <br> * 创 建 人:周建飞 <br> * 创建时间:2016-7-14 上午10:44:36 <br> * 修 改 人: <br> * 修改日期: <br> * @param context * @return PreferencesManager */ public static PreferencesManager getInstance(Context context) { return getInstance(context, shareName); } /** * 得到单例模式的PreferencesManager对象<br> * 方 法 名:getInstance <br> * 创 建 人:周建飞 <br> * 创建时间:2016-7-14 上午10:43:34 <br> * 修 改 人: <br> * 修改日期: <br> * @param context 上下文 * @param shareName 文件名称 * @return PreferencesManager */ public static PreferencesManager getInstance(Context context, String shareName) { if (instance == null) { synchronized (PreferencesManager.class) { if (instance == null) { instance = new PreferencesManager(context, shareName); } } } return instance; } public void put(String key, boolean value) { Editor edit = preferences.edit(); if (edit != null) { edit.putBoolean(key, value); edit.commit(); } } public void put(String key, String value) { Editor edit = preferences.edit(); if (edit != null) { edit.putString(key, value); edit.commit(); } } public void put(String key, int value) { Editor edit = preferences.edit(); if (edit != null) { edit.putInt(key, value); edit.commit(); } } public void put(String key, float value) { Editor edit = preferences.edit(); if (edit != null) { edit.putFloat(key, value); edit.commit(); } } public void put(String key, long value) { Editor edit = preferences.edit(); if (edit != null) { edit.putLong(key, value); edit.commit(); } } public void put(String key, Set<String> value) { Editor edit = preferences.edit(); if (edit != null) { edit.putStringSet(key, value); edit.commit(); } } /** * 保存复杂对象<br> * 方 法 名:put <br> * 创 建 人:周建飞 <br> * 创建时间:2016-7-14 上午10:20:19 <br> * 修 改 人: <br> * 修改日期: <br> * @param key 对象的键 * @param object void 传入对象 */ public void put(String key, Object object) { // 创建字节输出流 ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 创建字节对象输出流 ObjectOutputStream out = null; try { // 然后通过将字对象进行64转码,写入key值为key的sp中 out = new ObjectOutputStream(baos); out.writeObject(object); String objectVal = new String(Base64.encode(baos.toByteArray(), Base64.DEFAULT)); Editor edit = preferences.edit(); if (edit != null) { edit.putString(key, objectVal); edit.commit(); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (baos != null) { baos.close(); } if (out != null) { out.close(); } } catch (IOException e) { e.printStackTrace(); } } } public String get(String key) { return preferences.getString(key, ""); } public String get(String key, String defValue) { return preferences.getString(key, defValue); } public boolean get(String key, boolean defValue) { return preferences.getBoolean(key, defValue); } public int get(String key, int defValue) { return preferences.getInt(key, defValue); } public float get(String key, float defValue) { return preferences.getFloat(key, defValue); } public long get(String key, long defValue) { return preferences.getLong(key, defValue); } public Set<String> get(String key, Set<String> defValue) { return preferences.getStringSet(key, defValue); } /** * 获取对象<br> * 方 法 名:get <br> * 创 建 人:周建飞 <br> * 创建时间:2016-7-14 上午10:19:14 <br> * 修 改 人: <br> * 修改日期: <br> * @param key 对应的键 * @param clazz 对应的对象class * @return T */ @SuppressWarnings("unchecked") public <T> T get(String key, Class<T> clazz) { if (preferences.contains(key)) { String objectVal = preferences.getString(key, null); byte[] buffer = Base64.decode(objectVal, Base64.DEFAULT); // 一样通过读取字节流,创建字节流输入流,写入对象并作强制转换 ByteArrayInputStream bais = new ByteArrayInputStream(buffer); ObjectInputStream ois = null; try { ois = new ObjectInputStream(bais); T t = (T) ois.readObject(); return t; } catch (StreamCorruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { try { if (bais != null) { bais.close(); } if (ois != null) { ois.close(); } } catch (IOException e) { e.printStackTrace(); } } } return null; } public int getTheme(int defThemeId) { return instance.get(THEME, defThemeId); } public void setTheme(int themeId) { instance.put(THEME, themeId); } public String getLanguage(String defLang) { return instance.get(LANG, defLang); } public void setLang(String Language) { instance.put(LANG, Language); } /** * 清除SharedPreferences全部保存数据<br> * 方 法 名:clearAll <br> * 创 建 人:周建飞 <br> * 创建时间:2016-7-14 上午10:36:16 <br> * 修 改 人: <br> * 修改日期: <br> * void */ public void clearAll() { preferences.edit().clear().commit(); }
代码应用:
PreferencesManager.getInstance(context, "setting").clearAll();
// 保存字符串
// PreferencesManager.getInstance(context, "setting").put("String",
// "String");
String defString = PreferencesManager.getInstance(context, "setting").get("String", "defString");
NLog.i(tag, "String:" + defString);
// 保存整形
PreferencesManager.getInstance(context, "setting").put("int", 5);
int defint = PreferencesManager.getInstance(context, "setting").get("int", 0);
NLog.i(tag, "int:" + defint);
// 保存单精度,里面没有双进度的方法
PreferencesManager.getInstance(context, "setting").put("float", 5.0f);
float deffloat = PreferencesManager.getInstance(context, "setting").get("float", 10f);
NLog.i(tag, "float:" + deffloat);
// 保存长整形
PreferencesManager.getInstance(context, "setting").put("long", 100000000);
long deflong = PreferencesManager.getInstance(context, "setting").get("long", 1111111111);
NLog.i(tag, "long:" + deflong);
// 保存序列
Set<String> set = new HashSet<String>();
set.add("1");
set.add("2");
set.add("3");
set.add("4");
set.add("5");
PreferencesManager.getInstance(context, "setting").put("set", set);
Set<String> defset = new HashSet<String>();
defset.add("def");
Set<String> getset = PreferencesManager.getInstance(context, "setting").get("set", defset);
for (Iterator it = getset.iterator(); it.hasNext();) {
NLog.i(tag, "set:" + it.next());
}
// 保存对象
// PreferencesManager.getInstance(context, "setting").put("vehispara", vehispara);
Vehispara getVehispara = (Vehispara) PreferencesManager.getInstance(context, "setting").get("vehispara",
Vehispara.class);
// NLog.i(tag, "obj:" + getVehispara.getJcxdh());
// NLog.i(tag, "obj:" + getVehispara.getJyjgbh());
相关文章推荐
- Volley解析Json加载图片
- javascript运算符――位运算符全面介绍
- js 怎么获得写在css文件中的display属性
- css
- H5制作哪家强?四大H5页面制作工具大比拼
- ReactNative学习中遇到的坑
- Vue.js利用数据变化异步加载数据
- ButterKnifeZelezny简单使用教程
- js数组操作
- CSS之Position详解
- 读取本地JSON文件并显示
- 【时间轴】推荐几款jQuery时间轴插件Timeline
- sendRedirect与forward
- CSS3新增样式-borderRadius的使用
- css画三角形
- Angular.js 实现数字转换汉字实例代码
- zookeeper 之znode 节点
- zookeeper 之znode 节点
- zookeeper 之znode 节点
- 原生js ajax get与post区别