安卓开发一般都需要进行数据缓存,常用操作老司机已为你封装完毕,经常有小伙伴问怎么判断缓存是否可用,那我告诉你,你可以用这份工具进行存储和查询,具体可以查看源码,现在为你开车,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();
}
}}
终点站
好了,终点站到了,如果对本次旅途满意的话,请给五星好评哦,没关注的小伙伴轻轻点个上方的关注,毕竟老司机牺牲了很多时间才换来这么一份工具类,如果该工具类依赖其他工具类,都可以在我的史上最全的常用开发工具类收集(持续更新中)中找到。
點擊查看更多內容
為 TA 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦