带有滑行的 Firebase 存储抛出 GlideException:无法加载资源

时间:2021-03-28 11:23:24

标签: android firebase firebase-storage firebaseui

有大量重复的答案

几乎所有的我都试过了

但我仍然无法在 Glide 中使用 Firebase 存储图像。

val ref = Firebase.storage.reference.child("/images/icons")   // <- sub directory 'icons'
ref.listAll()
    .addOnSuccessListener { (items, _) ->
        items.forEach { item ->
                                // gs://pakage-name/images/icons/icon_1.png
                                // gs://pakage-name/images/icons/icon_2.png
                                // gs://pakage-name/images/icons/icon_3.png
                                // path print work well as shown above
    }
    .addOnFailureListener {
                    // an error occurred!
    }

问题在于Firebase.storage.reference.child(这里有问题)

1.如果我将(顶级)路径放入 child("/images")

和文件位于顶层,(即 /images/icon_1.png 2、3 等..)

滑行有效。我可以在 ImageView 中看到该图像

2.但是如果我将(子级别)路径放入 child("/images/icons/)

和文件位于子级别,即 (/images/icon/icon_1.png 2, 3, 等等..)

滑行不起作用。并抛出异常

W/Glide: Load failed for gs://pakage-name/images/icons/icon_1.png with size [112x112]
    class com.bumptech.glide.load.engine.GlideException: Failed to load resource

为什么 Glide 会抛出异常?

我已经有@GlideModule、@BindingAdapter、依赖项

@GlideModule
class MainAppGlideModule : AppGlideModule() {

    override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
        super.registerComponents(context, glide, registry)
        registry.append(
            StorageReference::class.java,
            InputStream::class.java,
            FirebaseImageLoader.Factory()
        )
    }
}

依赖

implementation 'com.github.bumptech.glide:glide:4.12.0'
kapt 'com.github.bumptech.glide:compiler:4.12.0'
implementation platform('com.google.firebase:firebase-bom:26.2.0')
implementation 'com.google.firebase:firebase-storage-ktx'
implementation 'com.firebaseui:firebase-ui-storage:7.1.1'

绑定适配器

@BindingAdapter(value = ["imageRef", "placeholder"], requireAll = false)
fun ImageView.imageRef(imageRef: StorageReference?, placeholder: Drawable?) {
    
  Timber.d("Timber.d - glide - $imageRef")  
  // print gs://pakage-name/images/icons/icon_1.png
    
  if(imageRef != null) {
    Glide.with(this.context)
     .load(imageRef)
     .apply(RequestOptions().placeholder(placeholder))
     .into(this)
  } else {
    Glide.with(this)
      .load(placeholder)
      .into(this)
  }
}

0 个答案:

没有答案