【问题标题】:Storing image id into SQLite db but cannot retrieving it?将图像 ID 存储到 SQLite 数据库中但无法检索它?
【发布时间】:2017-06-24 20:58:45
【问题描述】:

我有一个问题。我知道我可以在 SQLite 数据库中将图像存储为 byte array。但这需要一些额外的 CPU 工作,所以我尝试只存储 id (R.drawable.myImage)。

我将它存储为一个整数,然后我可以将其取回。我正在像这样将图像设置为 imageview:

ivSportIcon.setImageResource(getItem(i).getIcon());

但我得到一个错误:

Resources$NotFoundException:资源 ID #0x8

这是错误的方式吗?我应该将图像存储为字节数组吗?先感谢您!

【问题讨论】:

标签: android image sqlite


【解决方案1】:

我不知道您是如何存储资源 ID,但0x8 不是资源 ID。

除此之外,请记住资源 ID 会随着每次构建而变化,因此您今天保存的资源 ID 明天会有所不同。

相反,在数据库中存储一些其他标识符,您可以使用它来决定使用哪个可绘制对象。

将实际图像数据存储在数据库中的唯一原因是,如果您计划在未来更改图像并且您希望用户能够使用碰巧发生的旧图像与数据库条目相关联。

【讨论】:

  • 没有 0x8 是 R.java 文件中的有效资源 ID。除此之外,你是对的。我可能不需要为我的应用程序将图像保存到数据库中。而且我不知道资源ID每次都在变化。我会等待其他一些回复,然后我可以接受这个作为答案。在此之前,您还可以添加有关此主题的更多信息。
【解决方案2】:

您可以将 Drawable 的名称存储为 String,并使用 this method 检索其 id:

public static int getResourceIdForName(Context context, String drawableName) {
    final Resources res = context.getResources();
    final String packageName = context.getPackageName();
    return res.getIdentifier(drawableName , "drawable", packageName);
}

但是这有点不灵活,如果你决定将来更改你的drawable的名称,那么你也需要在数据库中更改名称。

【讨论】:

    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2015-08-01
    相关资源
    最近更新 更多