安卓开发一般都需要进行数据缓存,常用操作老司机已为你封装完毕,经常有小伙伴问怎么判断缓存是否可用,那我告诉你,你可以用这份工具进行存储和查询,具体可以查看源码,现在为你开车,Demo传送门。

站点

SharePreference缓存数据 → AppSharePreferenceMgr

put     : 保存数据的方法
get     : 获取数据的方法
putImage: 保存图片到SharedPreferences
getImage: 从SharedPreferences读取图片
remove  : 移除某个key值已经对应的值
clear   : 清除所有数据
contains: 查询某个key是否已经存在
getAll  : 返回所有的键值对

具体路线

public class AppSharePreferenceMgr {

/*** 保存在手机里面的文件名*/
public static final String FILE_NAME = "share_data"; /** * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法 */ 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 { editor.putString(key, object.toString()); } SharedPreferencesCompat.apply(editor); } /** * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值 */ 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); } return null; } /** * 移除某个key值已经对应的值 */ public static void remove(Context context, String key) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.remove(key); SharedPreferencesCompat.apply(editor); } /** * 清除所有数据 */ public static void clear(Context context) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.clear(); SharedPreferencesCompat.apply(editor); } /** * 查询某个key是否已经存在 */ public static boolean contains(Context context, String key) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); return sp.contains(key); } /** * 返回所有的键值对 */ public static Map<String, ?> getAll(Context context) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); return sp.getAll(); } 
/*** 保存图片到SharedPreferences* @param mContext* @param imageView*/
public static void putImage(Context mContext, String key, ImageView imageView) { BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable(); Bitmap bitmap = drawable.getBitmap(); // 将Bitmap压缩成字节数组输出流 ByteArrayOutputStream byStream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 80, byStream); // 利用Base64将我们的字节数组输出流转换成String byte[] byteArray = byStream.toByteArray(); String imgString = new String(Base64.encodeToString(byteArray, Base64.DEFAULT)); // 将String保存shareUtils AppSharePreferenceMgr.put(mContext, key, imgString); } /** * 从SharedPreferences读取图片 * @param mContext * @param imageView */ public static Bitmap getImage(Context mContext, String key, ImageView imageView) { String imgString = (String) AppSharePreferenceMgr.get(mContext, key, ""); if (!imgString.equals("")) { // 利用Base64将我们string转换 byte[] byteArray = Base64.decode(imgString, Base64.DEFAULT); ByteArrayInputStream byStream = new ByteArrayInputStream(byteArray); // 生成bitmap return BitmapFactory.decodeStream(byStream); } return null; } /** * 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类 */ private static class SharedPreferencesCompat { private static final Method sApplyMethod = findApplyMethod(); /** * 反射查找apply的方法 */ @SuppressWarnings({ "unchecked", "rawtypes" }) private static Method findApplyMethod() { try { Class clz = SharedPreferences.Editor.class; return clz.getMethod("apply"); } catch (NoSuchMethodException e) { } return null; } /** * 如果找到则使用apply执行,否则使用commit */ public static void apply(SharedPreferences.Editor editor) { try { if (sApplyMethod != null) { sApplyMethod.invoke(editor); return; } } catch (IllegalArgumentException e) { } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } editor.commit(); } }

}

终点站

  好了,终点站到了,如果对本次旅途满意的话,请给五星好评哦,没关注的小伙伴轻轻点个上方的关注,毕竟老司机牺牲了很多时间才换来这么一份工具类,如果该工具类依赖其他工具类,都可以在我的史上最全的常用开发工具类收集(持续更新中)中找到。

转载于:https://www.cnblogs.com/AbrahamCaiJin/p/7267114.html

SharePreference工具类相关推荐

  1. 开源集锦(五)开源框架和快速开发工具类

    Volley https://github.com/stormzhang/AndroidVolley http://blog.csdn.net/t12x3456/article/details/922 ...

  2. Android开发工具类 Utils

    包括了各种工具类.辅助类.管理类等 Awesome_API: https://github.com/marktony/Awesome_API/blob/master/Chinese.md 收集中国国内 ...

  3. Android开发辅助工具类 Utils

    包括了各种工具类.辅助类.管理类等    都可以 在Git  里找到代码 来研究,深入 Awesome_API: https://github.com/marktony/Awesome_API/blo ...

  4. Android开发辅助工具类 Utils 汇总

    包括了各种工具类.辅助类.管理类等 Awesome_API: https://github.com/marktony/Awesome_API/blob/master/Chinese.md 收集中国国内 ...

  5. Android开发工具类

    包括了各种工具类.辅助类.管理类等 Awesome_API: https://github.com/marktony/Awesome_API/blob/master/Chinese.md 收集中国国内 ...

  6. Android工具类整合

    Android-JSONUtil工具类 常用的Json工具类,包含Json转换成实体.实体转json字符串.list集合转换成json.数组转换成json public class JSONUtil ...

  7. 史上最全的常用开发工具类收集Android

    API 银行卡管理 → BankCheck checkBankCard : 校验银行卡卡号是否合法 getBankCardCheckCode: 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验 ...

  8. 史上最全的开发工具类

    银行卡管理 → BankCheck checkBankCard : 校验银行卡卡号是否合法 getBankCardCheckCode: 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位 ge ...

  9. java日期转化工具类

    package com.rest.ful.utils;import java.text.DateFormat; import java.text.ParseException; import java ...

最新文章

  1. rk3399在linux机上烧写img,烧写固件 — TB-96AI documentation
  2. 编译系统总结篇-Android10.0编译系统(十一)
  3. 学习:双机热备、集群、负载均衡、SQL故障转移群集简单理解(转)
  4. r语言向量代码如何创建函数c,R中向量基本操作:创建、运算、访问
  5. http协议、cookie及session
  6. android平台 arcgisr_《ArcGIS Runtime SDK for Android开发笔记》——Android Studio基本配置与使用...
  7. 小强的HTML5移动开发之路(18)——HTML5地理定位
  8. Git区分文件名大小写
  9. C# :异步编程的注意点
  10. JMeter:负载测试关系数据库
  11. 我的前同事,阿里大牛的技术感悟
  12. openssh升级后无法登陆解决方案
  13. filter在ios不兼容 js_jq的animate属性不支持transform 和 ios手机上box-shadow兼容性问题 和...
  14. 找到dht网络的节点了
  15. 用户推广成果总结会议
  16. java 模糊图片_记录三种实现图片模糊的方法
  17. CSS3实现八方向云台控制器器样式
  18. python背包问题求最大价值 | 动态规划
  19. underscorejs-pluck学习
  20. 小程序代码审核一二事

热门文章

  1. c语言从stdin读入
  2. 2 用python进行OpenCV实战之图像基本知识
  3. 相关性检验_相关系数
  4. bootstrap上传文件美化
  5. LeetCode简单题之拼写单词
  6. 加密算法有哪些?对称加密和非对称加密的区别?
  7. TS中的感叹号和问号的用法
  8. [C] [编程题]连通块(DFS解决)
  9. [JavaScript] Math里的api
  10. Python数据挖掘:绘制直方图,设置上下限和步长,绘制子图