Скользите вместе с FirebaseStorage, не получая последнюю фотографию, даже когда онлайн - PullRequest
0 голосов
/ 20 апреля 2020

Я использую 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 последней.

1 Ответ

1 голос
/ 25 апреля 2020

Нашел подход к решению проблемы и опубликовал его, если у кого-то возникла такая же проблема.

Мне удалось получить обновленные фотографии с использованием функции подписи 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)), который получает время обновления объекта хранилища и позволяет ему обновить sh.

...