将图像ID存储到SQLite数据库但无法检索它?

时间:2017-06-24 20:58:46

标签: android image sqlite

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

我将它存储为整数,然后我可以将其检索回来。我将我的图像设置为imageview,如下所示:

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

但是我收到了一个错误:

  

资源$ NotFoundException:资源ID#0x8

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

您可以将Drawable的名称存储为字符串,并使用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的名称,那么您还需要更改数据库中的名称。