我正在将Glide与FirebaseStorage一起使用,以获取存储在FirebaseStorage中的照片并在应用程序中显示。问题是在存储中更新照片时,未获取更新的照片,而是在应用程序中显示了旧照片。设备在线,并且永远不会更新最新照片。
thirdPhotoStorageReference = FirebaseStorage.getInstance().reference.child("photos/${key}/3.jpg")
GlideApp.with(this)
.load(thirdPhotoStorageReference)
.override(screenWidth, screenHeight)
.listener(object : RequestListener<Drawable> {
override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
showPhotoImageView(thirdPhotoImageView)
return false
}
override fun onLoadFailed(e: GlideException?, model: Any?, target: com.bumptech.glide.request.target.Target<Drawable>?, isFirstResource: Boolean): Boolean {
hidePhotoImageView(thirdPhotoImageView)
return false
}
})
.placeholder(circularProgressDrawable3)
.centerCrop()
.into(thirdPhotoImageView)
@GlideModule
class MyAppGlideModule : AppGlideModule() {
override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
// Register FirebaseImageLoader to handle StorageReference
registry.append(StorageReference::class.java, InputStream::class.java,
FirebaseImageLoader.Factory())
}
}
感谢您的帮助。注意:更新照片时,它将用最新的照片替换现有的照片3.jpg。
找到了解决问题的方法,如果有人遇到同样的问题,则将其发布。
我能够使用Glide的签名功能获取更新的照片。请参见下面的代码
thirdPhotoStorageReference.metadata.addOnSuccessListener {
GlideApp.with(this)
.load(thirdPhotoStorageReference)
.signature(ObjectKey(it.updatedTimeMillis))
.override(screenWidth, screenHeight)
.listener(object : RequestListener<Drawable> {
override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
showPhotoImageView(thirdPhotoImageView)
return false
}
override fun onLoadFailed(e: GlideException?, model: Any?, target: com.bumptech.glide.request.target.Target<Drawable>?, isFirstResource: Boolean): Boolean {
hidePhotoImageView(thirdPhotoImageView)
return false
}
})
.placeholder(circularProgressDrawable3)
.centerCrop()
.into(thirdPhotoImageView)
}
这里的关键是signature(ObjectKey(it.updatedTimeMillis))
,它获取存储对象的更新时间并让其滑动以刷新它。