Android 与FirebaseStorage一起滑动,即使在线也无法获取最新照片
我正在使用Glide和FirebaseStorage获取存储在FirebaseStorage中的照片并在应用程序中显示。问题是,当照片在存储器中更新时,更新的照片不会被提取,而旧照片会显示在应用程序中。该设备处于联机状态,且其从未更新最新照片Android 与FirebaseStorage一起滑动,即使在线也无法获取最新照片,android,firebase,firebase-storage,android-glide,Android,Firebase,Firebase Storage,Android Glide,我正在使用Glide和FirebaseStorage获取存储在FirebaseStorage中的照片并在应用程序中显示。问题是,当照片在存储器中更新时,更新的照片不会被提取,而旧照片会显示在应用程序中。该设备处于联机状态,且其从未更新最新照片 thirdPhotoStorageReference = FirebaseStorage.getInstance().reference.child("photos/${key}/3.jpg") GlideApp.with(this)
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)
感谢您的帮助。
注意:当我更新照片时,它会将现有的photo 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)
}
thirdphotostragereference.metadata.addOnSuccessListener{
GlideApp.with(这个)
.加载(第三张照片参考)
.signature(ObjectKey(it.updatedTimeMillis))
.覆盖(屏幕宽度、屏幕高度)
.listener(对象:RequestListener{
覆盖onResourceReady(资源:可绘制?、模型:任意?、目标:目标?、数据源:数据源?、isFirstResource:Boolean):布尔{
showPhotoImageView(第三张照片图像视图)
返回错误
}
重写fun onLoadFailed(e:GlideException?,型号:Any?,目标:com.bumptech.glide.request.target.target?,isFirstResource:Boolean):布尔{
hidePhotoImageView(第三个照片图像视图)
返回错误
}
})
.占位符(CircularProgressDrawable 3)
.centerCrop()
.进入(第三张照片图像视图)
}
这里的关键是
签名(ObjectKey(it.updatedTimeMillis))
,它获取存储对象的更新时间,并让glide刷新它。听起来glide正在缓存图像,这通常对性能和成本管理是一件好事。是的,看起来图像正在设备上缓存。但同时,我希望在更新FirebaseStorage中的实际文件时更新它们。不知道怎么做。你必须建立一种查询方法,告诉你底层内容是否发生了变化。
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)
}