安卓开发通常都须要进行数据缓存,经常使用操做老司机已为你封装完毕,常常有小伙伴问怎么判断缓存是否可用,那我告诉你,你能够用这份工具进行存储和查询,具体能够查看源码,如今为你开车,Demo传送门。
站点java
put : 保存数据的方法 get : 获取数据的方法 putImage: 保存图片到SharedPreferences getImage: 从SharedPreferences读取图片 remove : 移除某个key值已经对应的值 clear : 清除全部数据 contains: 查询某个key是否已经存在 getAll : 返回全部的键值对
public class AppSharePreferenceMgr {git
/** * 保存在手机里面的文件名 */ 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(); } }
}github
终点站
好了,终点站到了,若是对本次旅途满意的话,请给五星好评哦,没关注的小伙伴轻轻点个上方的关注,毕竟老司机牺牲了不少时间才换来这么一份工具类,若是该工具类依赖其余工具类,均可以在个人史上最全的经常使用开发工具类收集(持续更新中)中找到。数组