安卓开发一般都需要进行数据缓存,常用操作老司机已为你封装完毕,经常有小伙伴问怎么判断缓存是否可用,那我告诉你,你可以用这份工具进行存储和查询,具体可以查看源码,现在为你开车,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(); } }
}
终点站
好了,终点站到了,如果对本次旅途满意的话,请给五星好评哦,没关注的小伙伴轻轻点个上方的关注,毕竟老司机牺牲了很多时间才换来这么一份工具类,如果该工具类依赖其他工具类,都可以在我的史上最全的常用开发工具类收集(持续更新中)中找到。