如何在android中的sharedpreferences中存储位图对象

时间:2013-06-24 05:24:21

标签: android bitmap

我想将位图对象存储在共享首选项和resume方法中,只需检索该对象并在后台设置它。请告诉我如何以共享首选项存储和检索它。问题是在共享首选项中我们可以放像String,int,bolean,long等值,但不是bitmao对象。请帮我解决这个问题.Below是我的代码:

    @Override
protected void onResume() {
    super.onResume();

rl_changeBackground.setBackgroundDrawable(new BitmapDrawable(getResources(),HomeSafeStaticVariables.bitmap));

    }
    }

3 个答案:

答案 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();

使用以下方法

从字节数组编码base64
String 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中。

检查this question

答案 2 :(得分:1)

如果你真的想将你的图像存储到SharedPreferences中,你应该看看这个解决方案(或者已经存在的类似的解决方案):

How to store and retrieve bitmap in sharedPreferences in Android?