【问题标题】:How can I populate a listView with images from my existing database?如何使用现有数据库中的图像填充 listView?
【发布时间】:2015-04-17 16:43:57
【问题描述】:

我正在创建一个服装购物车应用程序。

我现有的 SQLite 数据库包含所有项目及其信息,我需要在 listView 中显示每个项目。我需要显示商品的品牌、价格、尺寸、商店等信息,以及商品的图片。

因此,虽然这些项目的图像不在我的数据库中,但我确实将它们保存在我计算机上的一个文件夹中,并且我知道它们与哪些项目一起使用,并且数据库中的每个项目都有一个 id它。

所以为了显示每个项目的图像并在 listView 中显示正确的图像,我可以将所有图像放入我的可绘制文件夹中,然后将它们与 ID 匹配我从数据库中检索到的项目?

我已经设置了我的 listView,它显示除了每个项目的图像之外的所有内容,所以有人知道我该怎么做吗?

【问题讨论】:

  • 你为什么不简单地将这些图像放入数据库?
  • 是的,我确实想过这样做,但我不知道如何将图像放入数据库中,您知道我们如何做到这一点,然后如何将它们从数据库中取出并放入他们进入我的列表视图?

标签: android sqlite listview android-listview


【解决方案1】:

首先,这些图片来自哪里?虽然从技术上讲,您可以将数据库中的图像保存为 BLOB(二进制大对象),但您不能在预安装时为数据库播种。如果图像是静态的,那么您需要将它们作为资源。如果图像是动态的(如通过 API 调用检索),那么比将它们存储为 BLOB 更好的方法是将它们按原样保存在 SD 卡或内部存储中,名称对应于 id。

这就是我会做的。我会在 db 表中添加一个“imgname”列。该列填充了drawable中相应图像的文件名。它将与查询中的其他项目信息一起返回。现在的问题是我们如何找到给定文件名的资源整数(因为包括 ImageView 在内的所有视图都不使用文件名)?使用这个:

int xlShirtId = MyActivity.this.getResources().getIdentifier("shirt_xl", "drawable", 
  MyActivity.this.getPackageName()); // where shirt_xl is the file name

然后,只需在任何需要显示该衬衫的 Activity 中使用 imageView.setImageResource(xlShirtId); 设置任何 ImageView。当然,如果你对 id 没问题,你就不必创建这个新列。只需用 id 命名所有文件。但是 id 可能不是很可读。

无论如何,请记住您需要预加载数据库。

【讨论】:

  • 我刚刚从网上获得了图像,现在我将它们保存在我的计算机上的一个文件中。那么最好的办法是将它们全部存储在我的可绘制文件夹中,或者如果我可以将它们放入我的数据库中,我如何将图像插入到我已经存在的数据库中,然后为 listView 检索它们?
  • 把它们放在drawable中是最好的。正如我所提到的,图像在 sqlite 中保存为 BLOB,而这个 BLOB 基本上是一个字节数组。因此从数据库中检索它不会给你一个图像。您仍然需要将其重建为位图,这意味着额外的工作。
  • 是的,我想我会把它们放在 drawable 文件夹中,所以当我填充 listView 时,我知道我只需要将它们与数据库中的 id 匹配,对吗?此外,我希望能够将一个项目添加到购物车,这将是另一个活动,那么我如何确保当我只将这些项目显示到购物车时,图像也会在那里?是不是一样的,用id来匹配?
  • 我明白你刚才举的例子在说什么。但是有一个问题,所以我实际上并没有在我的 MainActivity 中这样做,而是在我的 ListItemAdapter 中,这是我用于显示这些项目的自定义适配器。所以这是我输入的那一行: int xlShirtId = ListItemAdapter.this.getIdentifier("shirt_xl", "drawable", ListItemAdapter.this.getPackageName());但它给了我 getIdentifier 和 getPackageName 方法的错误。
  • 您只需要将 Context 传递给 ListItemAdapter。定义一个构造函数,就像这篇文章 stackoverflow.com/questions/16594557/… 的最后一个答案一样。然后在您的 Activity 中像这样实例化它: new ListItemAdapter(MyActivity.this) 。然后您就可以在 ListItemAdapter 中使用它,例如: context.getIdentifier("shirt_xl", ...)
猜你喜欢
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 2015-04-12
相关资源
最近更新 更多