6

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

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

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

    }
    }
4

3 回答 3

23

您只能在 SharedPreference 中添加 Boolean、Float、Int、Long、String 值。但是您可以做的一件事是将位图转换为 Base64 字符串。并从 SharedPrefrence 中检索它后将其转换为位图。

使用以下方法将位图转换为字节数组:

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));

这可能会对您有所帮助。试试看,请告诉我!

于 2013-06-24T05:48:04.520 回答
3

您可以将位图存储为 base64 字符串SharedPreferences。但将位图图像存储在SharedPreferences. 您应该将图像存储在 SD 卡中并将路径保存在SharedPreferences.

检查这个问题

于 2013-06-24T05:38:10.657 回答
1

如果您真的想将图像存储到 SharedPreferences 中,您应该查看此解决方案(或此处已存在的类似解决方案):

如何在 Android 的 sharedPreferences 中存储和检索位图?

于 2013-06-24T05:39:16.563 回答