Наконец !! Я разобрался с вопросом:
Мой требуемый AppGlideModule.kt был неверным. Для котлина это должно выглядеть так:
import android.content.Context
import com.bumptech.glide.annotation.GlideModule
import com.bumptech.glide.module.AppGlideModule
import com.google.firebase.storage.StorageReference
import com.bumptech.glide.Glide
import com.bumptech.glide.Registry
import com.firebase.ui.storage.images.FirebaseImageLoader
import java.io.InputStream
import com.google.firebase.FirebaseOptions.Builder
@GlideModule
class RequiredAppGlideModule : 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())
}
}
Как только я сделал это и добавил все правильные ссылки на импорт, показанные выше, я получил неизвестную ошибку ссылки для FirebaseImageLoader
, поэтому я также создал класс FirebaseImageLoader.kt, используя этот код:
<code>package com.firebase.ui.storage.images
import android.util.Log
import com.bumptech.glide.Priority
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.Key
import com.bumptech.glide.load.Options
import com.bumptech.glide.load.data.DataFetcher
import com.bumptech.glide.load.model.ModelLoader
import com.bumptech.glide.load.model.ModelLoaderFactory
import com.bumptech.glide.load.model.MultiModelLoaderFactory
import com.google.android.gms.tasks.OnFailureListener
import com.google.android.gms.tasks.OnSuccessListener
import com.google.firebase.storage.StorageReference
import com.google.firebase.storage.StreamDownloadTask
import java.io.IOException
import java.io.InputStream
import java.nio.charset.Charset
import java.security.MessageDigest
/**
* ModelLoader implementation to download images from FirebaseStorage with Glide.
*
*
*
* First, register this class in your AppGlideModule:
* <pre>
* @Override
* public void registerComponents(Context context, Registry registry) {
* // Register FirebaseImageLoader to handle StorageReference
* registry.append(StorageReference.class, InputStream.class,
* new FirebaseImageLoader.Factory());
* }
*
*
*
*
* Затем загрузите StorageReference в ImageView.
*
* StorageReference ref = FirebaseStorage.getInstance().getReference().child("myimage");
* ImageView iv = (ImageView) findViewById(R.id.my_image_view);
*
* GlideApp.with(this)
* .load(ref)
* .into(iv);
*
* /
Класс FirebaseImageLoader: ModelLoader {
/ **
* Фабрика для создания [FirebaseImageLoader].
* /
Фабрика класса: ModelLoaderFactory {
переопределить забавную сборку (фабрика: MultiModelLoaderFactory): ModelLoader {
вернуть FirebaseImageLoader ()
}
переопределить веселый разрыв () {
// Нет операции
}
}
переопределить весело buildLoadData (ссылка: StorageReference,
высота: Int,
ширина: Int,
Параметры: Параметры): ModelLoader.LoadData ? {
return ModelLoader.LoadData (
FirebaseStorageKey (ссылка),
FirebaseStorageFetcher (ссылка))
}
переопределить забавные дескрипторы (ссылка: StorageReference): Boolean {
вернуть истину
}
закрытый класс FirebaseStorageKey (закрытый val mRef: StorageReference): Key {
переопределить забавный updateDiskCacheKey (digest: MessageDigest) {
digest.update (mRef.path.toByteArray (Charset.defaultCharset ()))
}
}
закрытый класс FirebaseStorageFetcher (закрытый val mRef: StorageReference): DataFetcher {
приватная переменная mStreamTask: StreamDownloadTask? = ноль
приватная переменная mInputStream: InputStream? = ноль
переопределить веселье loadData (приоритет: приоритет,
обратный вызов: DataFetcher.DataCallback ) {
mStreamTask = mRef.stream
mStreamTask !!
.addOnSuccessListener {снимок ->
mInputStream = snapshot.stream
callback.onDataReady (mInputStream)
}
.addOnFailureListener {e -> callback.onLoadFailed (e)}
}
переопределить веселую очистку () {
// Закрыть поток, если это возможно
if (mInputStream! = null) {
пытаться {
mInputStream !!. закрыть ()
mInputStream = null
} catch (e: IOException) {
Log.w (TAG, «Не удалось закрыть поток», e)
}
}
}
переопределить удовольствие отменить () {
// Отмените задачу, если это возможно
if (mStreamTask! = null && mStreamTask !!. isInProgress) {
mStreamTask !!. отмена ()
}
}
переопределить веселье getDataClass (): Class {
return InputStream :: class.java
}
переопределить веселье getDataSource (): DataSource {
вернуть DataSource.REMOTE
}
}
сопутствующий объект {
private val TAG = "FirebaseImageLoader"
}
}
Затем я импортировал это в свой requiredAppGlideModule.kt
, и как только я сделал эти две вещи, изображение загрузилось без проблем! Ура!