将 Firebase 存储映像与 Glide 结合使用

2024-07-04

有大量重复的答案,我几乎尝试了所有答案,但我仍然无法将 Firebase 存储映像与 Glide 一起使用。

首先我正在使用docs https://firebase.google.com/docs/storage/android/download-files

    FirebaseStorage storage  = FirebaseStorage.getInstance();
    StorageReference storageRef = storage.getReference();
    StorageReference pathReference = storageRef.child("sorular/1.jpg");

   // ImageView in your Activity
   ImageView imageView = rootView.findViewById(R.id.imageView);

   // Load the image using Glide
   Glide.with(this /* context */)
        .using(new FirebaseImageLoader()) // Cannot resolve method 'using
        .load(pathReference)
        .into(imageView);

如果我清理 Glide 的 .using 部分,logcat 会给出以下错误:

E/GlideExecutor:请求抛出了未捕获的可抛出 com.bumptech.glide.Registry$NoModelLoaderAvailableException:失败 找到模型的任何 ModelLoaders: gs://123...appspot.com/sorular/1.jpg
在 com.bumptech.glide.Registry.getModelLoaders(Registry.java:227)
在 com.bumptech.glide.load.engine.DecodeHelper.getLoadData(DecodeHelper.java:179) 在 com.bumptech.glide.load.engine.DecodeHelper.getCacheKeys(DecodeHelper.java:197) 在 com.bumptech.glide.load.engine.ResourceCacheGenerator.startNext(ResourceCacheGenerator.java:41) 在 com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:282) 在 com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:249) 在 com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:222)
在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 在 java.lang.Thread.run(Thread.java:761)
在 com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:347)

那么如何以最佳方式在我的 Android 应用程序中使用 firebase 存储图像呢?

这也是我的构建 gradle 依赖项:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.0.2'
    implementation 'com.android.support:palette-v7:27.0.2'
    implementation "com.android.support:cardview-v7:27.0.2"
    implementation "com.android.support:recyclerview-v7:27.0.2"
    implementation "com.android.support:support-v4:27.0.2"
    implementation 'com.android.support:design:27.0.2'

    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.github.florent37:materialviewpager:1.2.3'


    implementation 'com.google.firebase:firebase-database:11.8.0'
    implementation 'com.google.firebase:firebase-storage:11.8.0'
    implementation 'com.firebaseui:firebase-ui-storage:2.0.1'
    implementation 'com.google.firebase:firebase-auth:11.8.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

改变这个:

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

to this:

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

根据 Glide 文档:

using()

using() API 在 Glide 4 中被删除,以鼓励用户使用 AppGlideModule 注册一次组件,以避免对象重复使用。您无需在每次加载图像时创建一个新的 ModelLoader,而是在 AppGlideModule 中注册一次,然后让 Glide 检查您的模型(传递给 load() 的对象)以确定何时使用已注册的 ModelLoader。

为了确保您仅将 ModelLoader 用于某些模型,请实现如上所示的 handlers() 来检查每个模型,并仅在应使用 ModelLoader 时返回 true。

using()已从 Glide 4 中删除。

要解决这个问题,您需要执行以下操作: 要从 StorageReference 加载图像,首先注册一个 AppGlideModule:

  @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());
  }
}

创建 AppGlideModule 类并完成干净构建后,您可以使用 GlideApp 将 StorageReference 加载到 ImageView 中:

// Reference to an image file in Cloud Storage
StorageReference storageReference = ...;

// ImageView in your Activity
ImageView imageView = ...;

// Download directly from StorageReference using Glide
// (See MyAppGlideModule for Loader registration)
GlideApp.with(this /* context */)
        .load(storageReference)
        .into(imageView);

更多信息在这里:https://github.com/firebase/FirebaseUI-Android/tree/master/storage https://github.com/firebase/FirebaseUI-Android/tree/master/storage

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Firebase 存储映像与 Glide 结合使用 的相关文章

  • Android Studio 0.2.7 使用 Gradle 构建异常

    我正在从 Eclipse 迁移到 Android Studio 尽管由于 Android Studio 仍处于 预览 模式 但我正在缓慢且增量地迁移 自从更新到最新版本的 Android Studio 0 2 7 以来 我在默认构建过程中遇
  • Spring Boot,JPA 错误:“通过 JDBC 语句执行 DDL 时出错”

    我正在尝试使用一个非常基本的 到目前为止 Spring Boot 应用程序在我的 MySQL 数据库中添加一个条目 我使用了在网上找到的一些零碎内容 这是我试图遵循的代码 netgloo spring boot samples spring
  • 替换 Apache POI XWPF 中的文本

    我刚刚发现 Apache POI 库对于使用 Java 编辑 Word 文件非常有用 具体来说 我想编辑一个DOCX使用 Apache POI 的 XWPF 类的文件 我发现没有合适的方法 文档可以执行此操作 有人可以分步骤解释一下如何替换
  • 如何在 ADF Oracle 11gR1 中的对话框窗口中的弹出窗口中刷新表

    我正在研究显示一个带有搜索表的弹出窗口的要求 当用户单击弹出窗口中的搜索按钮 提供输入文本框 时 需要使用新的数据集刷新搜索表 我创建了一个populateSearchTable 通过填充数组中的值来生成表的方法deviceListArra
  • Java JDK中有并发List吗?

    如何创建一个并发 List 实例 在其中可以按索引访问元素 JDK 有我可以使用的类或工厂方法吗 ConcurrentLinkedQueue 如果您不关心基于索引的访问 而只想要列表的插入顺序保留特性 那么您可以考虑java util co
  • getAllNetworkInfo() 在 M 中已弃用,但其替代品具有不同的行为

    ConnectivityManager 的 getAllNetworkInfo 在 API 23 上已弃用 其注释表示使用 getAllNetworks 代替 然而我发现这些没有相同的行为 例如 如果手机有可用的活动蜂窝网络 但 wifi
  • Jenkins 中的算法协商失败 SSH

    我正在尝试从 Jenkins ssh 到本地服务器 但抛出以下错误 SSH Exception Algorithm negotiation fail com jcraft jsch JSchException Algorithm negot
  • 如何用多个手指在画布上绘图

    我正在使用安卓Canvas创建绘图应用程序的类 这是我第一次尝试使用 Canvas 类 到目前为止 我使用的代码工作正常 绘图工作正常 但我在这段代码中意识到 它允许用户仅用一根手指进行绘画 我的意思是说 如果用户使用多于一根手指在画布上绘
  • 如何将node.js应用程序转换为cordova

    我们建造了一个node js适用于台式机和平板电脑的应用程序 它是完全基于网络的应用程序 现在我计划在中实现与本机应用程序相同的应用程序android using Apache cordova 在项目目录下 我们有node modules
  • 通过解析异常获取方法名及其包含的参数

    当我收到异常时 例如IOException or RunTimeException 我只能知道班级里的行号 首先是我的问题 是否可以通过异常检索方法名称 其次 是否可以通过行号检索该方法以及该方法的参数 附注我需要知道确切的方法名称及其参数
  • Androidx 模块,android:attr/ttcIndex 和 android:attr/fontVariationSettings 未找到

    我正在将所有支持 appcompat 库迁移到 androidx 所有更新后 由于此错误 我无法构建我的项目 app processDebugManifest UP TO DATE AGPBI kind error text error r
  • 使用 v8::Locker 的正确方法是什么?为什么必须使用它?

    我正在尝试使用 NDK 将 v8 嵌入到 Android 应用程序中 我有一个看起来像这样的 JNI 模块 未显示 JNI 映射代码 include
  • 如何在 Java 中使用 Bing 搜索 api

    我需要从 Bing 中提取搜索结果 有没有可用的Java代码来实现这一点 此 MSDN 论坛主题 http social msdn microsoft com Forums en US DataMarket thread f93738b4
  • GWT 的图表和绘图 API

    我正在尝试找到一个可以在 GWT 中使用 java 而不是 javascript 使用的图表和绘图 api 我遇到的唯一问题是我发现需要互联网连接的代码将无法连接到互联网 有谁知道这样的API吗 这是我找到的 但又无法使用 https co
  • 如何使用 xstream 将 Hashmap 映射到 XML 中的键值属性

    我有以下实体 XStreamAlias entity public class MapTestEntity XStreamAsAttribute public Map
  • React-native 应用程序在真实的 Android 设备上崩溃

    我正在使用react native 目前开始使用redux并创建了一个应用程序 但是当我在模拟器上运行该应用程序时 它工作正常 然后我通过 USB 将我的手机与 android 6 连接 它也可以工作 但在 Android 8 的其他设备中
  • 给出文档名称的 UID

    我想知道在我的 firestore 数据库中保存用户首选项的最佳实践是什么 我会尝试用一个例子来解释 Case 1 我的 用户 集合中有这种文档 名称是由 Firebase 随机生成的 有 3 个字段 user uid 细绳 nicknam
  • 创建自定义 Google Now 卡片

    Google 为 Google Now 提供了各种 卡片 http www google com landing now http www google com landing now 可以创建自己的卡片吗 该系统看起来非常模块化 但我还没
  • MySQL 连接器错误“服务器时区值中欧时间”[重复]

    这个问题在这里已经有答案了 我的问题 MySQL 连接器 服务器时区值中欧时间 无法识别或代表多个时区 该项目 小型网络项目 JavaEE Tomcat 8 5 MySQL Maven 我的尝试 Maven gt 将 MySQL 连接器从
  • java中的长轮询

    我已经编写了用于长轮询的服务器端代码 我想用java写客户端程序 因此 根据长轮询 客户端发送一个由服务器帮助的请求 当事件发生时服务器响应该请求 然后客户端发送新的请求 所以我面临的麻烦是用java编写的客户端 发送请求后 如何继续检查客

随机推荐

  • python3 file.readline EOF?

    我无法确定何时到达 python 中的文件末尾file readline fi open myfile txt r line fi readline if line EOF or something similar dosomething
  • 以多态类型作为函数参数的 std::function 的容器

    我想要 另一个 回调注册的东西 扩展公共基本事件类型的不同事件类型将触发关联的回调函数 这是最初的草案或想法 include
  • 动态改变股票行情间隔

    我想动态更改我的股票间隔 我写了一个例子来向您展示我是如何做的 我的用例不是 加速度计 但我希望它能给您一个想法 http play golang org p 6ANFnoE6pA http play golang org p 6ANFno
  • Wix 安装程序开始菜单快捷方式未出现

    我正在尝试使用 WiX v3 7 因为 VS2012 不再包括安装和部署项目 为 Windows 应用程序创建一个安装程序项目 以用于学习目的 Wix 工具集已集成到 VS 我正在创建一个新的 WiX 单一安装程序安装项目 安装程序始终编译
  • 如何在ionic 2中生成和显示QR码

    我找到了在 Angular 和 ionic 1 中生成条形码的文档 但我需要在 Ionic 2 项目中生成一个 尝试 JsBarcode 项目 有一个 Angular 1 的包装器 我使用了本期中的说明来让它在 Angular 2 上工作
  • 表的存储引擎不支持修复。 InnoDB 还是 MyISAM?

    修复数据库后 我收到以下错误 scode tracker ap visits note The storage engine for the table doesn t support repair scode tracker visit
  • 如何根据颜色和尺寸属性通过关联产品图像更改可配置的产品主图像?

    我正在使用具有尺寸和颜色属性的可配置产品 我想根据所选选项更改可配置产品视图上的主图像 例如 如果我选择红色 则具有红色属性值的关联产品的图像应在我选择该选项后立即显示在主图像上 我怎样才能做到这一点 谢谢 我已经为我正在努力解决的这个问题
  • 在 Emacs VM 中设置 Gmail

    使用 mutt 作为电子邮件客户端一段时间后 我想尝试 GNU Emacs 的 VM 包 如果重要的话 Ubuntu 11 04 64 位 来阅读我的邮件 如果有可用的配置文件 emacs 和新的 vm 文件中必要的修改 我会在网络上进行
  • 复选框值未插入 mysql 中

    我正在尝试将复选框值插入我的 mysql 数据库 程序中没有错误 但我无法将值存入数据库 在数据库中它显示为空 public class MainActivity extends AppCompatActivity CheckBox box
  • 如何在完成另一个线程后运行一个线程

    我想运行两个线程r1 and r2 首先启动r1并完成后r1 start r2 仅在完成后r1 这怎么能做到呢 两个线程 一个接着一个 我的答案here https stackoverflow com questions 4592716 m
  • 返回动态类型的枚举方法

    我有一个枚举 我想创建一个方法来为每种情况返回不同的类型 例如 我有一本字典 String Any 为了处理这些值 我使用枚举来创建一个键数组 enum Foo case option1 case option2 func createKe
  • 上传时防止空闲状态(iOS 上的 Web 应用程序)

    我正在构建一个将在移动和桌面上使用的网络应用程序 在 iOS 上进行测试后 我注意到我的手机将进入空闲状态 屏幕关闭 返回时显示锁定屏幕 即使有是一个正在上传的文件 ajax上传 有什么办法可以防止这种情况发生吗 我正在通过将应用程序作为
  • 使用 FileChannel 与 NIO.2 同步目录

    我刚刚发现 有了NIO 2 至少在Linux下 我可以打开一个FileChannel在目录上 并调用力 真 http download oracle com javase 7 docs api java nio channels FileC
  • gc() 和 rm() 有什么区别

    我定期使用调用来清理 R 中的内存rm list ls 我需要调用垃圾收集器吗gc 在那之后 这2个函数有什么区别 做gc call rm 对于某些变量 首先 需要注意的是 两者有很大不同gc不删除any您仍在使用的变量 它只会为您不再有权
  • Firebase 数据库崩溃 SQLiteDatabaseLockedException

    我在少数设备上遇到此崩溃 但仅限于 Android 4 我使用的是 Firebase Android SDK 10 2 1 11 0 2 推迟更新到最新版本 因为它也会强制更新 Google Play 服务 并且许多用户继续保留旧的 GPS
  • 谷歌图表错误请求

    有谁知道为什么这是一个错误的请求 http chart apis google com chart cht lxy chd t 0 0 7 1 4 2 2 2 9 3 6 4 3 5 5 8 6 5 7 2 7 9 8 6 9 4 10 1
  • 声明时指针总是设置为 nil 吗?

    我找到了各种人 文章 例如这个答案 https stackoverflow com a 1262500 37941 表明 Objective C 中指针的值在你给它赋值之前是没有定义的 但是 我在实践中发现它们会自动设置为nil甚至在我打电
  • 如何使用 PHP 获取当前年份?

    我想在网站的页脚中放置版权声明 但我认为它对于今年来说已经过时了 非常俗气 我如何使用 PHP 自动更新年份 Answer recommended by PHP collectives php Collective 您可以使用date ht
  • 我已经严重破坏了 Cython,它的性能比纯 Python 还差。为什么?

    我对 Python 相当陌生 并且对 C 完全无知 不幸的是 因此我正在努力正确理解使用 Cython 的某些方面 在对 Python 程序进行分析并发现它只是几个循环占用大部分时间后 我决定考虑将它们转储到 Cython 中 最初 我只是
  • 将 Firebase 存储映像与 Glide 结合使用

    有大量重复的答案 我几乎尝试了所有答案 但我仍然无法将 Firebase 存储映像与 Glide 一起使用 首先我正在使用docs https firebase google com docs storage android downloa