从SharedPreference中读取Bitmap数据
折腾了快两个小时,疯狂的找博客解决这个问题,终于在这位大佬这里看到一个正解。
问题:使用相机拍照获得的照片是Bitmap型的,而使用SharePreferences是无法直接存储Bitmap数据的。
SharedPreference可以存储的数据类型如下图所示:
解决方法:
首先,是存储数据。
第一步:将Bitmap压缩至字节数组输出流ByteArrayOutputStream
ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 80, byteArrayOutputStream);注:bitmap就是你的bitmap,填你自己的bitmap名字即可。
第二步:利用Base64将字节数组输出流中的数据转换成字符串String
byte[] byteArray=byteArrayOutputStream.toByteArray(); String imageString=new String(Base64.encodeToString(byteArray, Base64.DEFAULT));
第三步:数据保存
这一步就很简单
editor.putString("photo_bitmap",imageString);注:editor 即
private SharedPreferences.Editor editor;用你自己的editor名字即可。
这里的第一个空是填一个名字(指的是photo——bitmap),你获取你的这个数据的时候也需要用到这个名字。
接下来,读取数据。
第一步:取出字符串形式的Bitmap
String photoB = pref.getString("photo_bitmap","2");注:pref和上面的editor类似,用你自己的
第二步:利用Base64将字符串转换为ByteArrayInputStream
byte[] byteArray= Base64.decode(photoB, Base64.DEFAULT); ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(byteArray);
第三步:利用ByteArrayInputStream生成Bitmap
Bitmap bitmap1 = BitmapFactory.decodeStream(byteArrayInputStream);
存在的问题:在真机上面测试的时候,虽然可以正常使用,拍完照保存图片很慢,不知道是不是存储bitmap数据的原因,如果有小伙伴发现了更好的方法,希望可以告知一下。