我想将位图对象存储在共享首选项和resume方法中,只需检索该对象并在后台设置它。请告诉我如何以共享首选项存储和检索它。问题是在共享首选项中我们可以放像String,int,bolean,long等值,但不是bitmao对象。请帮我解决这个问题.Below是我的代码:
@Override
protected void onResume() {
super.onResume();
rl_changeBackground.setBackgroundDrawable(new BitmapDrawable(getResources(),HomeSafeStaticVariables.bitmap));
}
}
答案 0 :(得分:17)
您只能在SharedPreference中添加Boolean,Float,Int,Long,String值。但您可以做的一件事是将Bitmap转换为Base64 String。从SharedPrefrence检索后将其转换为Bitmap。
使用以下方法将位图转换为字节数组:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos); //bm is the bitmap object
byte[] b = baos.toByteArray();
使用以下方法
从字节数组编码base64String encoded = Base64.encodeToString(b, Base64.DEFAULT);
并将其保存到SharedPrefrence。
现在假设您的图像数据位于一个名为encoded的字符串中,以下内容应该为您提供Base64字符串中的BitMap:
byte[] imageAsBytes = Base64.decode(encoded.getBytes(), Base64.DEFAULT);
ImageView image = (ImageView)this.findViewById(R.id.ImageView);
image.setImageBitmap(BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length));
这可能会对你有所帮助。试试,请告诉我!
答案 1 :(得分:3)
你可以在SharedPreferences
中将Bitmap存储为base64字符串。但是在SharedPreferences
中存储位图图像并不是一个好习惯。您应该将图像存储在SD卡中并将路径保存在SharedPreferences
中。
答案 2 :(得分:1)
如果你真的想将你的图像存储到SharedPreferences中,你应该看看这个解决方案(或者已经存在的类似的解决方案):
How to store and retrieve bitmap in sharedPreferences in Android?