【发布时间】:2020-01-04 05:47:31
【问题描述】:
如何在 sharedpreferences 中保存 ImageView? 我正在尝试创建一个测验,其中玩家需要硬币来解锁下一个级别,因此下一个级别将带有锁,一旦玩家购买该级别,锁就会消失,我已经拿到分数了。保存,现在只缺图,先谢谢大家了!
【问题讨论】:
如何在 sharedpreferences 中保存 ImageView? 我正在尝试创建一个测验,其中玩家需要硬币来解锁下一个级别,因此下一个级别将带有锁,一旦玩家购买该级别,锁就会消失,我已经拿到分数了。保存,现在只缺图,先谢谢大家了!
【问题讨论】:
解决了您的问题,请执行以下操作:
将位图编码为base64字符串的写方法-
// method for bitmap to base64
public static String encodeTobase64(Bitmap image) {
Bitmap immage = image;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
immage.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);
Log.d("Image Log:", imageEncoded);
ret
urn imageEncoded; }
2.在此方法中传递您的位图,就像您喜欢的一样:
SharedPreferences.Editor editor = myPrefrence.edit();
editor.putString("namePreferance", itemNAme);
editor.putString("imagePreferance", encodeTobase64(yourbitmap));
editor.commit();
3 当您想在任何地方显示您的图像时,再次使用 decode 方法将其转换为位图:
// method for base64 to bitmap
public static Bitmap decodeBase64(String input) {
byte[] decodedByte = Base64.decode(input, 0);
return BitmapFactory
.decodeByteArray(decodedByte, 0, decodedByte.length);
}
请在这个方法中传递你的字符串,然后做你想做的事。
【讨论】:
从imageview获取位图,然后转换成base64字符串,然后保存到sharedpreference,然后当你需要图像时再次获取base64字符串转换为位图,然后用户imageview.setBitmap(bitmap);
现在一切就绪
对于位图的编码和解码,您可以使用:
public static String encodeTobase64(Bitmap image) {
Bitmap immage = image;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
immage.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);
Log.d("Image Log:", imageEncoded);
return imageEncoded;
}
public static Bitmap decodeBase64(String input) {
byte[] decodedByte = Base64.decode(input, 0);
return BitmapFactory
.decodeByteArray(decodedByte, 0, decodedByte.length);
}
【讨论】:
将图像存储在共享首选项中并不是一个好主意,因为共享首选项用于存储轻量级的应用设置。您应该使用 SQLite 或 Room 数据库,尤其是在您有很多图像的情况下。另一种方法是将图像缓存在外部存储中。
【讨论】: