与FirebaseStorage一起使用,即使在线也无法获取最新照片

问题描述 投票:0回答:1

我正在将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。

android firebase firebase-storage android-glide glide
1个回答
1
投票

找到了解决问题的方法,如果有人遇到同样的问题,则将其发布。

我能够使用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)),它获取存储对象的更新时间并让其滑动以刷新它。

© www.soinside.com 2019 - 2024. All rights reserved.