【发布时间】:2017-11-03 12:41:11
【问题描述】:
我对小部件有一个想法,当我单击小部件时,文本和图像将随机刷新。我已经用文本完成了这项工作,但我的图像存储在 Firebase 上,我想获取这些随机图像并将它们显示在 ImageView 中。那我该怎么做呢?
我的 Firebase 存储的屏幕截图:
我的应用截图:
【问题讨论】:
标签: android image firebase firebase-realtime-database firebase-storage
我对小部件有一个想法,当我单击小部件时,文本和图像将随机刷新。我已经用文本完成了这项工作,但我的图像存储在 Firebase 上,我想获取这些随机图像并将它们显示在 ImageView 中。那我该怎么做呢?
我的 Firebase 存储的屏幕截图:
我的应用截图:
【问题讨论】:
标签: android image firebase firebase-realtime-database firebase-storage
要从 Firebase 存储中随机选择图像,您需要在某处拥有文件的下载 url 列表。如this answer 中所述,目前没有 Api 可以获取这些图片的列表,因此您必须将它们的 url 存储在某个地方。
一种可能性是简单地添加网址 的文件到 Firebase 数据库。 当您想选择随机图像时,您可以通过数据库, 并从此列表中选择一个随机网址。
要在 ImageView 中实际显示它们,您可以使用 Glide 之类的库来简化此过程。 Firebase 的 FriendlyPix 示例应用程序展示了如何执行此操作。
【讨论】:
作为@Bernd 回答的替代方案:您可以使用递增数字将图像名称修改为标准命名方案。然后,您可以动态检索图像 URL,如下所示:
Example image names:
image_0.jpg
image_1.jpg
image_2.jpg
image_3.jpg
一些用于生成随机图像文件路径的示例 Java 代码:
//The amount of images you have stored
int maxImages = 4; //Amount of images
Random random = new Random();
//Randomly generate a filepath to an image
String imageFilePath = "image_" + random.nextInt(maxImages) + ".jpg";
然后,您可以将生成的 imageFilePath 与 FireBase 存储的 getDownloadUrl() 一起使用,以检索正确的下载 URL。然后,您可以将 URL 传递给 Glide、Picasso 或其他图像下载库,以将其加载到您的 ImageView 中。
优势
只需使用 Firebase 存储即可实现您的目标
数据库开销更少,不必在那里维护图像列表
缺点
你必须严格控制图片名称,不能自定义图片名称
你必须有固定数量的图片
如果您在不更改其他图像名称的情况下删除图像可能会中断
如果找不到图像(例如,如果随机数超出范围),则检索 URL 将引发异常
【讨论】: