有大量重复的答案
几乎所有的我都试过了
但我仍然无法在 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)
}
}