找不到为模型类注册的任何 ModelLoaders:class com.google.firebase.storage.StorageReference

问题描述 投票:0回答:3

我已经浏览了之前提出的有关该主题的所有问题。但提到的解决方案对我来说不起作用。

按照 Glide 自述文件中的规定,我已经为我的应用程序注册了一个模型加载器,它位于 app->src->java 目录中:

MyAppGlideModule.java

package com.kenadams.app;

import android.content.Context;
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());
    }

}

这就是我在适配器类中调用 Glide 模块的方式:

adapter.java

    @Override
    public void onBindViewHolder(topicAdapter.ViewHolder holder, int position) {
  //Setting text      
holder.textView.setText(HtmlCompat.fromHtml(this.data.get(position),HtmlCompat.FROM_HTML_MODE_LEGACY));
//Setting image
        Glide.with(holder.iv.getContext()).load(sr.child("/1.png")).into(holder.iv);


    }

没有语法错误,应用程序编译成功,但我不断收到此运行时错误:

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:594)
        at com.bumptech.glide.load.engine.DecodeHelper.getLoadData(DecodeHelper.java:212)
        at com.bumptech.glide.load.engine.DecodeHelper.getCacheKeys(DecodeHelper.java:229)
        at com.bumptech.glide.load.engine.ResourceCacheGenerator.startNext(ResourceCacheGenerator.java:47)
        at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311)
        at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:277)
        at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:413)
        at java.lang.Thread.run(Thread.java:764)
        at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run(GlideExecutor.java:372)

一些答案之前提到使用

GlideApp
代替
Glide
。但是,这对我不起作用。 我不断收到语法错误:
Cannot resolve symbol 'GlideApp'

此外,当我尝试构建模块时,由于

android-exported:true
不在
intent filter
中,构建不断失败。这没有意义,因为
MyAppGlideModule
扩展了
AppGlideModule
而不是
AppCompatActivity
。所以,即使我想用
android-exported:true
添加意图过滤器,我也无法这样做。

java android firebase android-glide
3个回答
4
投票

您使用什么依赖项?

确保您已为 Kotlin 添加了此内容:

    kapt 'com.github.bumptech.glide:compiler:4.14.2'

对于 Java 来说是这样的:

annotationProcessor 'com.github.bumptech.glide:compiler:4.14.2'

您完成的 Glide 代码应该如下所示:

Glide.with(this).load(FirebaseStorageUtil.pathToReference(user.profilePicturePath))
                    .placeholder(R.drawable.ic_baseline_account_circle_24)
                    .into(binding.profilePictureImageView)

1
投票

您使用什么依赖项?

确保您已为 Kotlin 添加了此内容:

    kapt 'com.github.bumptech.glide:compiler:4.14.2'

对于 Java 来说是这样的:

annotationProcessor 'com.github.bumptech.glide:compiler:4.14.2'

0
投票

它实际上无需 kapt 即可工作,您所需要的只是 Firebase 中的这个:

implementation 'com.firebaseui:firebase-ui-storage:7.2.0'

Firebase 文档中所述。

但是,令我困惑的是,上述文档中的示例在调用 Glide 之前不会下载文件:) 此代码仅适用于 Firebase 依赖项:

Firebase.storage(remoteBucket)
.reference
.child(remoteFullPath)
.downloadUrl   // <- Hello! it is me you're looking for
.addOnSuccessListener {
    try {
        Glide.with(this)
            .load(it)
            .into(imageView)
    } catch (ex: IllegalArgumentException) {
        Timber.e(ex.localizedMessage)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.