【问题标题】:Save an image to Sharedpreferences将图像保存到 Sharedpreferences
【发布时间】:2020-01-04 05:47:31
【问题描述】:

如何在 sharedpreferences 中保存 ImageView? 我正在尝试创建一个测验,其中玩家需要硬币来解锁下一个级别,因此下一个级别将带有锁,一旦玩家购买该级别,锁就会消失,我已经拿到分数了。保存,现在只缺图,先谢谢大家了!

【问题讨论】:

标签: android sharedpreferences


【解决方案1】:

解决了您的问题,请执行以下操作:

将位图编码为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);
}

请在这个方法中传递你的字符串,然后做你想做的事。

【讨论】:

  • 非常感谢亲爱的朋友的回复!我要考试了。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    将图像存储在共享首选项中并不是一个好主意,因为共享首选项用于存储轻量级的应用设置。您应该使用 SQLite 或 Room 数据库,尤其是在您有很多图像的情况下。另一种方法是将图像缓存在外部存储中。

    【讨论】:

    • 非常感谢亲爱的朋友的小费!
    猜你喜欢
    • 2019-05-28
    • 2011-10-26
    • 2020-11-28
    • 2016-06-23
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多