Android进阶——Sharedpreferences保存对象和图片等复杂类型

引言
前面的一篇文章入门——数据存储之详解与应用简单总结了下的基本语法和用法 。虽然说通常我们都用保存轻量级的基本类型的数据,但是并不意味着不能保存复杂的数据类型,比如说对象、图片等等 。
一、保存和读取基本数据类型 1、保存基本类型的数据
/*** 根据传入的prefereces的文件名设置指定key-valeu*@param context* @param preferenceNameSharedPreferences的name* @param key 对应的Key键* @param object 对应的各种类型的值*/public static void saveKeyValue(Context context, String preferenceName, String key, Object object){SharedPreferences sharedPreferences=context.getSharedPreferences(preferenceName,context.MODE_PRIVATE);SharedPreferences.Editor editor=sharedPreferences.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());}editor.commit();}
2、读取基本类型的数据
/*** 根据传入的prefereces的文件名设置指定key-valeu*@param context* @param preferenceNameSharedPreferences的name* @param key 对应的Key键* @param object 对应的各种类型的值*/public static Object getValueByKey(Context context, String preferenceName,String key,Object object){SharedPreferences sharedPreferences=context.getSharedPreferences(preferenceName,context.MODE_PRIVATE);if (object instanceof String) {return sharedPreferences.getString(key, (String) object);} else if (object instanceof Integer) {return sharedPreferences.getInt(key, (Integer) object);} else if (object instanceof Boolean) {return sharedPreferences.getBoolean(key, (Boolean) object);} else if (object instanceof Float) {return sharedPreferences.getFloat(key, (Float) object);} else if (object instanceof Long) {return sharedPreferences.getLong(key, (Long) object);} else {return sharedPreferences.getString(key, object.toString());}}
【Android进阶——Sharedpreferences保存对象和图片等复杂类型】二、保存和读取图片
原则上只能将字符串以key-value的形式保存,但是万物皆二进制,所以我们可以采用编码的方式将任何二进制数据转化为字符串,从而将可以将二进制数据保存在文件中,而最常用的编码格式是.
1、保存二进制数据
/*** @param context* @param preferenceName* @param resId* @param key*/public static void saveDrawable(Context context, String preferenceName,int resId,String key) {SharedPreferences sharedPreferences=context.getSharedPreferences(preferenceName,context.MODE_PRIVATE);SharedPreferences.Editor editor=sharedPreferences.edit();Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resId);ByteArrayOutputStream baos = new ByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.PNG, 50, baos);String imageBase64 = new String(Base64.encodeToString(baos.toByteArray(),Base64.DEFAULT));editor.putString(key,imageBase64 );editor.commit();}

Android进阶——Sharedpreferences保存对象和图片等复杂类型

文章插图
2、读取二进制数据
Android进阶——Sharedpreferences保存对象和图片等复杂类型

文章插图
public static Drawable getDrawableByKey(Context context, String preferenceName,String key) {SharedPreferences sharedPreferences=context.getSharedPreferences(preferenceName,context.MODE_PRIVATE);String temp = sharedPreferences.getString(key, "");ByteArrayInputStream bais = new ByteArrayInputStream(Base64.decode(temp.getBytes(), Base64.DEFAULT));return Drawable.createFromStream(bais, "");}