Glide Gradle无法识别ModelLoader

7
我正在尝试使用 FirebaseUI 从 Firebase Storage 检索照片,并使用 Glide 直接在我的 ImageView 中显示它。为了实现这一点,我创建了一个如 Firebase 文档所示的 ModelLoader。请参考以下代码:
import com.bumptech.glide.Glide;
import com.bumptech.glide.Registry;
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
import com.firebase.ui.storage.images.FirebaseImageLoader;
import com.google.firebase.storage.StorageReference;

import java.io.InputStream;

@GlideModule
public class MyAppGlideModule extends AppGlideModule {
    @Override
    public void registerComponents(Context context, Glide glide, Registry registry) {
        // Register FirebaseImageLoader to handle StorageReference
        registry.append(StorageReference.class, InputStream.class,
                new FirebaseImageLoader.Factory());
    }
}

这个文件在我的项目文件夹内,因此gradle应该能够识别它。 问题是,每次我运行应用程序并且执行以下代码时: Glide.with(context!!).load(reference).into(binding.imgPhoto) 会出现以下错误:

W/Glide: Failed to find GeneratedAppGlideModule. You should include an annotationProcessor compile dependency on com.github.bumptech.glide:compiler in your application and a @GlideModule annotated AppGlideModule implementation or LibraryGlideModules will be silently ignored
E/GlideExecutor: Request threw uncaught throwable
    com.bumptech.glide.Registry$NoModelLoaderAvailableException: Failed to find any ModelLoaders registered for model class: class com.google.firebase.storage.StorageReference
        at com.bumptech.glide.load.model.ModelLoaderRegistry.getModelLoaders(ModelLoaderRegistry.java:77)
        at com.bumptech.glide.Registry.getModelLoaders(Registry.java:585)
        at com.bumptech.glide.load.engine.DecodeHelper.getLoadData(DecodeHelper.java:207)
        at com.bumptech.glide.load.engine.DecodeHelper.getCacheKeys(DecodeHelper.java:224)
        at com.bumptech.glide.load.engine.ResourceCacheGenerator.startNext(ResourceCacheGenerator.java:44)
        at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310)
        at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:276)
        at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)
        at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393)

发生了什么?我已经创建了 Loader,清除了缓存,重新启动了程序,但问题仍未解决...

你有没有解决这个问题的机会,@AndreNogueira? - DJ. Aduvanchik
1个回答

12

你需要创建一个类 (例如 MyAppGlideModule),继承 AppGlideModule 并使用 GlideApp.with... 替代 Glide.with...。查看此 链接 以获取完整说明。

MyAppGlideModule 类可以放置在源目录中的任何位置,并且由 Glide 注解处理器在编译时处理,以创建 GlideApp 类。

Kotlin:

@GlideModule
class AppGlide: AppGlideModule(){

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

    }
}

3
谢谢!我真的希望开发文档能提到这一点,而不仅仅是在https://firebase.google.com/docs/storage/android/download-files上放置一个单一函数而没有太多其他信息。 - mcy
1
不知道为什么,但是使用Glide而不是GlideApp对我有效。 - Tayyab Mazhar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接