查看: 567|回复: 0

[Java学习] SharePreference工具类

发表于 2017-8-8 08:00:03
尚学堂AD

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

SharePreference缓存数据 → AppSharePreferenceMgr
  1. put : 保存数据的方法
  2. get : 获取数据的方法
  3. putImage: 保存图片到SharedPreferences
  4. getImage: 从SharedPreferences读取图片
  5. remove : 移除某个key值已经对应的值
  6. clear : 清除所有数据
  7. contains: 查询某个key是否已经存在
  8. getAll : 返回所有的键值对
复制代码
具体路线

public class AppSharePreferenceMgr {

  1. /**
  2. * 保存在手机里面的文件名
  3. */
  4. public static final String FILE_NAME = "share_data";
  5. /**
  6. * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法
  7. */
  8. public static void put(Context context, String key, Object object)
  9. {
  10. SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
  11. Context.MODE_PRIVATE);
  12. SharedPreferences.Editor editor = sp.edit();
  13. if (object instanceof String)
  14. {
  15. editor.putString(key, (String) object);
  16. } else if (object instanceof Integer)
  17. {
  18. editor.putInt(key, (Integer) object);
  19. } else if (object instanceof Boolean)
  20. {
  21. editor.putBoolean(key, (Boolean) object);
  22. } else if (object instanceof Float)
  23. {
  24. editor.putFloat(key, (Float) object);
  25. } else if (object instanceof Long)
  26. {
  27. editor.putLong(key, (Long) object);
  28. } else
  29. {
  30. editor.putString(key, object.toString());
  31. }
  32. SharedPreferencesCompat.apply(editor);
  33. }
  34. /**
  35. * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值
  36. */
  37. public static Object get(Context context, String key, Object defaultObject)
  38. {
  39. SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
  40. Context.MODE_PRIVATE);
  41. if (defaultObject instanceof String)
  42. {
  43. return sp.getString(key, (String) defaultObject);
  44. } else if (defaultObject instanceof Integer)
  45. {
  46. return sp.getInt(key, (Integer) defaultObject);
  47. } else if (defaultObject instanceof Boolean)
  48. {
  49. return sp.getBoolean(key, (Boolean) defaultObject);
  50. } else if (defaultObject instanceof Float)
  51. {
  52. return sp.getFloat(key, (Float) defaultObject);
  53. } else if (defaultObject instanceof Long)
  54. {
  55. return sp.getLong(key, (Long) defaultObject);
  56. }
  57. return null;
  58. }
  59. /**
  60. * 移除某个key值已经对应的值
  61. */
  62. public static void remove(Context context, String key)
  63. {
  64. SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
  65. Context.MODE_PRIVATE);
  66. SharedPreferences.Editor editor = sp.edit();
  67. editor.remove(key);
  68. SharedPreferencesCompat.apply(editor);
  69. }
  70. /**
  71. * 清除所有数据
  72. */
  73. public static void clear(Context context)
  74. {
  75. SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
  76. Context.MODE_PRIVATE);
  77. SharedPreferences.Editor editor = sp.edit();
  78. editor.clear();
  79. SharedPreferencesCompat.apply(editor);
  80. }
  81. /**
  82. * 查询某个key是否已经存在
  83. */
  84. public static boolean contains(Context context, String key)
  85. {
  86. SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
  87. Context.MODE_PRIVATE);
  88. return sp.contains(key);
  89. }
  90. /**
  91. * 返回所有的键值对
  92. */
  93. public static Map<String, ?> getAll(Context context)
  94. {
  95. SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
  96. Context.MODE_PRIVATE);
  97. return sp.getAll();
  98. }
复制代码
  1. /**
  2. * 保存图片到SharedPreferences
  3. * @param mContext
  4. * @param imageView
  5. */
  6. public static void putImage(Context mContext, String key, ImageView imageView) {
  7. BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
  8. Bitmap bitmap = drawable.getBitmap();
  9. // 将Bitmap压缩成字节数组输出流
  10. ByteArrayOutputStream byStream = new ByteArrayOutputStream();
  11. bitmap.compress(Bitmap.CompressFormat.PNG, 80, byStream);
  12. // 利用Base64将我们的字节数组输出流转换成String
  13. byte[] byteArray = byStream.toByteArray();
  14. String imgString = new String(Base64.encodeToString(byteArray, Base64.DEFAULT));
  15. // 将String保存shareUtils
  16. AppSharePreferenceMgr.put(mContext, key, imgString);
  17. }
  18. /**
  19. * 从SharedPreferences读取图片
  20. * @param mContext
  21. * @param imageView
  22. */
  23. public static Bitmap getImage(Context mContext, String key, ImageView imageView) {
  24. String imgString = (String) AppSharePreferenceMgr.get(mContext, key, "");
  25. if (!imgString.equals("")) {
  26. // 利用Base64将我们string转换
  27. byte[] byteArray = Base64.decode(imgString, Base64.DEFAULT);
  28. ByteArrayInputStream byStream = new ByteArrayInputStream(byteArray);
  29. // 生成bitmap
  30. return BitmapFactory.decodeStream(byStream);
  31. }
  32. return null;
  33. }
  34. /**
  35. * 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类
  36. */
  37. private static class SharedPreferencesCompat
  38. {
  39. private static final Method sApplyMethod = findApplyMethod();
  40. /**
  41. * 反射查找apply的方法
  42. */
  43. @SuppressWarnings({ "unchecked", "rawtypes" })
  44. private static Method findApplyMethod()
  45. {
  46. try
  47. {
  48. Class clz = SharedPreferences.Editor.class;
  49. return clz.getMethod("apply");
  50. } catch (NoSuchMethodException e)
  51. {
  52. }
  53. return null;
  54. }
  55. /**
  56. * 如果找到则使用apply执行,否则使用commit
  57. */
  58. public static void apply(SharedPreferences.Editor editor)
  59. {
  60. try
  61. {
  62. if (sApplyMethod != null)
  63. {
  64. sApplyMethod.invoke(editor);
  65. return;
  66. }
  67. } catch (IllegalArgumentException e)
  68. {
  69. } catch (IllegalAccessException e)
  70. {
  71. } catch (InvocationTargetException e)
  72. {
  73. }
  74. editor.commit();
  75. }
  76. }
复制代码

}

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



回复

使用道具 举报