摘要
安卓开发一般都需要进行数据缓存,常用操作老司机已为你封装完毕,经常有小伙伴问怎么判断缓存是否可用,那我告诉你,你可以用这份工具进行存储和查询,具体可以查看源码,现在为你开车,Demo传送门。
安卓开发一般都需要进行数据缓存,常用操作老司机已为你封装完毕,经常有小伙伴问怎么判断缓存是否可用,那我告诉你,你可以用这份工具进行存储和查询,具体可以查看源码,现在为你开车,Demo传送门。
安卓开发一般都需要进行数据缓存,常用操作老司机已为你封装完毕,经常有小伙伴问怎么判断缓存是否可用,那我告诉你,你可以用这份工具进行存储和查询,具体可以查看源码,现在为你开车,Demo传送门。
put : 保存数据的方法\nget : 获取数据的方法\nputImage: 保存图片到SharedPreferences\ngetImage: 从SharedPreferences读取图片\nremove : 移除某个key值已经对应的值\nclear : 清除所有数据\ncontains: 查询某个key是否已经存在\ngetAll : 返回所有的键值对
public class AppSharePreferenceMgr {
/**\n * 保存在手机里面的文件名\n */public static final String FILE_NAME = "share_data";/**\n * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法\n */public static void put(Context context, String key, Object object){\n\n SharedPreferences sp = context.getSharedPreferences(FILE_NAME,\n Context.MODE_PRIVATE);\n SharedPreferences.Editor editor = sp.edit(); if (object instanceof String)\n {\n editor.putString(key, (String) object);\n } else if (object instanceof Integer)\n {\n editor.putInt(key, (Integer) object);\n } else if (object instanceof Boolean)\n {\n editor.putBoolean(key, (Boolean) object);\n } else if (object instanceof Float)\n {\n editor.putFloat(key, (Float) object);\n } else if (object instanceof Long)\n {\n editor.putLong(key, (Long) object);\n } else\n {\n editor.putString(key, object.toString());\n }\n\n SharedPreferencesCompat.apply(editor);\n}/**\n * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值\n */public static Object get(Context context, String key, Object defaultObject){\n SharedPreferences sp = context.getSharedPreferences(FILE_NAME,\n Context.MODE_PRIVATE); if (defaultObject instanceof String)\n { return sp.getString(key, (String) defaultObject);\n } else if (defaultObject instanceof Integer)\n { return sp.getInt(key, (Integer) defaultObject);\n } else if (defaultObject instanceof Boolean)\n { return sp.getBoolean(key, (Boolean) defaultObject);\n } else if (defaultObject instanceof Float)\n { return sp.getFloat(key, (Float) defaultObject);\n } else if (defaultObject instanceof Long)\n { return sp.getLong(key, (Long) defaultObject);\n } return null;\n}/**\n * 移除某个key值已经对应的值\n */public static void remove(Context context, String key){\n SharedPreferences sp = context.getSharedPreferences(FILE_NAME,\n Context.MODE_PRIVATE);\n SharedPreferences.Editor editor = sp.edit();\n editor.remove(key);\n SharedPreferencesCompat.apply(editor);\n}/**\n * 清除所有数据\n */public static void clear(Context context){\n SharedPreferences sp = context.getSharedPreferences(FILE_NAME,\n Context.MODE_PRIVATE);\n SharedPreferences.Editor editor = sp.edit();\n editor.clear();\n SharedPreferencesCompat.apply(editor);\n}/**\n * 查询某个key是否已经存在\n */public static boolean contains(Context context, String key){\n SharedPreferences sp = context.getSharedPreferences(FILE_NAME,\n Context.MODE_PRIVATE); return sp.contains(key);\n}/**\n * 返回所有的键值对\n */public static Map<String, ?> getAll(Context context)\n{\n SharedPreferences sp = context.getSharedPreferences(FILE_NAME,\n Context.MODE_PRIVATE); return sp.getAll();\n}
/**\n * 保存图片到SharedPreferences\n * @param mContext\n * @param imageView\n */public static void putImage(Context mContext, String key, ImageView imageView) {\n BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();\n Bitmap bitmap = drawable.getBitmap(); // 将Bitmap压缩成字节数组输出流\n ByteArrayOutputStream byStream = new ByteArrayOutputStream();\n bitmap.compress(Bitmap.CompressFormat.PNG, 80, byStream); // 利用Base64将我们的字节数组输出流转换成String\n byte[] byteArray = byStream.toByteArray();\n String imgString = new String(Base64.encodeToString(byteArray, Base64.DEFAULT)); // 将String保存shareUtils\n AppSharePreferenceMgr.put(mContext, key, imgString);\n}/**\n * 从SharedPreferences读取图片\n * @param mContext\n * @param imageView\n */public static Bitmap getImage(Context mContext, String key, ImageView imageView) {\n String imgString = (String) AppSharePreferenceMgr.get(mContext, key, ""); if (!imgString.equals("")) { // 利用Base64将我们string转换\n byte[] byteArray = Base64.decode(imgString, Base64.DEFAULT);\n ByteArrayInputStream byStream = new ByteArrayInputStream(byteArray); // 生成bitmap\n return BitmapFactory.decodeStream(byStream);\n } return null;\n}/**\n * 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类\n */private static class SharedPreferencesCompat{ private static final Method sApplyMethod = findApplyMethod(); /**\n * 反射查找apply的方法\n */\n @SuppressWarnings({ "unchecked", "rawtypes" }) private static Method findApplyMethod()\n { try\n {\n Class clz = SharedPreferences.Editor.class; return clz.getMethod("apply");\n } catch (NoSuchMethodException e)\n {\n } return null;\n } /**\n * 如果找到则使用apply执行,否则使用commit\n */\n public static void apply(SharedPreferences.Editor editor)\n { try\n { if (sApplyMethod != null)\n {\n sApplyMethod.invoke(editor); return;\n }\n } catch (IllegalArgumentException e)\n {\n } catch (IllegalAccessException e)\n {\n } catch (InvocationTargetException e)\n {\n }\n editor.commit();\n }\n}
}
好了,终点站到了,如果对本次旅途满意的话,请给五星好评哦,没关注的小伙伴轻轻点个上方的关注,毕竟老司机牺牲了很多时间才换来这么一份工具类,如果该工具类依赖其他工具类,都可以在我的史上最全的常用开发工具类收集(持续更新中)中找到。