Android Glide:无法加载 Firebase 存储的资源
Posted
技术标签:
【中文标题】Android Glide:无法加载 Firebase 存储的资源【英文标题】:Android Glide: Failed to load resource of Firebase Storage 【发布时间】:2021-05-30 02:34:31 【问题描述】:我正在尝试在存储在 Firebase 存储中的 CircularImageView 中显示图像,但 glide 给了我这个错误:
W/Glide: Load failed for gs://project-2d8i4.appspot.com/pictures/3HnfQSeBladDsD9sPEcKrhxJ6CB2 with size [1200x1200]
class com.bumptech.glide.load.engine.GlideException: Failed to load resource
图片在 Firestore 中保存为:
"gs://project-2d8i4.appspot.com/pictures/3HnfQSeBladDsD9sPEcKrhxJ6CB2"
绑定到图像视图(uri = "gs://project-2d8i4.appspot.com/pictures/3HnfQSeBladDsD9sPEcKrhxJ6CB2")
:
fun CircularImageView.bindProfilePicture(uri: String?)
Glide
.with(this)
.load(uri)
.into(this)
glide 的依赖项:
implementation 'com.github.bumptech.glide:glide:4.12.0'
任何帖子中没有任何答案对我有任何帮助。我希望有人能帮助我。谢谢。
【问题讨论】:
【参考方案1】:以下网址:
gs://project-2d8i4.appspot.com/pictures/3HnfQSeBladDsD9sPEcKrhxJ6CB
确实是存储在云存储中的文件。不幸的是,这个 URL 不能被 Glide 识别,因为它不是一个有效的 URL。要解决此问题,您需要获取“下载 URL”而不是以 gs://...
开头的 URL。
要获取实际下载地址,请查看官方文档:
How to create a reference to a file我的回答来自以下帖子:
How to get the download url from Firebase Storage?【讨论】:
嗨,谢谢。每当我将相同ID的图片上传到存储时,downloadUrl一直在变化,这很棒。它可以帮助我提供实时解决方案。【参考方案2】:为了避免 cmets 中提到的缓存,您可以将这两个与 glide 调用一起使用。
diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
选中 here 以使用滑行从 firebase url 下载。
【讨论】:
我需要将该文件下载到本地存储吗?因为我收到了同样的错误,另外还有java.io.IOException(File unsuitable for memory mapping)
。如果查看 Firebase 文档,在使用 FirebaseUI 时,我只需将引用传递给该文件 - 这就是我所做的。
我的错,如果你可以在这里查看:medium.com/@egemenhamutcu/…
太棒了。它确实会加载,但是当我使用相同的 ID 用不同的图片更新我的存储,然后 GlideApp 获取该 ID 下的图片时,它总是返回我上传的第一张图片。这怎么可能?这是缓存在我的手机上还是什么?
将这两种方法与您上面的滑行代码一起使用。 .diskCacheStrategy(DiskCacheStrategy.NONE) .skipMemoryCache(true)
使用这两个是个好主意吗?实际上,通过使用亚历克斯的回答,我可以使用捕获,并且即使使用相同的 ID,只要我更改存储的图片,downloadUrl 也会一直更改。感谢您的帮助。以上是关于Android Glide:无法加载 Firebase 存储的资源的主要内容,如果未能解决你的问题,请参考以下文章
glide4.0以上在Android9.0以上加载图片不显示解决方案
Android关于Glide的使用(高斯模糊加载监听圆角图片)