引言
前面的一篇文章入门——数据存储之详解与应用简单总结了下的基本语法和用法 。虽然说通常我们都用保存轻量级的基本类型的数据,但是并不意味着不能保存复杂的数据类型,比如说对象、图片等等 。
一、保存和读取基本数据类型 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();}
文章插图
2、读取二进制数据
文章插图
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, "");}
- 六 基于FreeRTOS与MQTT的物联网技术应用系列——步进电机控制基于Cr
- 用渐变效果做小球转动——ps
- 裁员潮来袭:Android开发如何自救?未来三年,趁早做好这3个准备
- 三 Android 程序开发——百度地图的使用 地图定位(定位+跟随+距离测量
- android基于虹软的人脸识别+测温+道闸项目实现
- SparkListener血缘——Openlineage插件实现思路
- Android studio制作类微信界面步骤
- USB摄像头——v4l2打开设备、获取设备支持的格式【以t113-s3为例】
- 从局部视野到全局推进:华为加速生态进阶
- 【大数据day04】——JVM优化 上(jvm的内存模型