android - 为什么 Glide 不能与 Firebase 存储一起使用
问题描述
我正在尝试从 Firebase 存储加载图像,但在使用 Glide 时出现异常
我的代码
storageReference=FirebaseStorage.getInstance().getReference().child("profiles/"+firebaseUser.getUid()+"/"+"profilePic");
Glide.with(FinishIntroActivity.this)
.load(storageReference.getDownloadUrl())
.into(profileFinishImg);
我的摇篮
implementation 'com.github.bumptech.glide:glide:4.8.0'
我得到的例外
W/Glide: Load failed for com.google.android.gms.tasks.zzu@669eaa8 with size [525x525]
class com.bumptech.glide.load.engine.GlideException: Failed to load resource
There was 1 cause:
com.bumptech.glide.Registry$NoModelLoaderAvailableException(Failed to find any ModelLoaders for model: com.google.android.gms.tasks.zzu@669eaa8)
call GlideException#logRootCauses(String) for more detail
Cause (1 of 1): class com.bumptech.glide.Registry$NoModelLoaderAvailableException: Failed to find any ModelLoaders for model: com.google.android.gms.tasks.zzu@669eaa8
2020-05-02 11:32:07.951 8343-8343/com.happyorbit.happyorbit I/Glide: Root cause (1 of 1)
com.bumptech.glide.Registry$NoModelLoaderAvailableException: Failed to find any ModelLoaders for model: com.google.android.gms.tasks.zzu@669eaa8
at com.bumptech.glide.Registry.getModelLoaders(Registry.java:584)
at com.bumptech.glide.load.engine.DecodeHelper.getLoadData(DecodeHelper.java:205)
at com.bumptech.glide.load.engine.DecodeHelper.getCacheKeys(DecodeHelper.java:223)
at com.bumptech.glide.load.engine.ResourceCacheGenerator.startNext(ResourceCacheGenerator.java:44)
at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:302)
at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:269)
at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:233)
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:446)
请帮助我正确使用 Glide。谢谢
解决方案
正如您从文档中看到的那样,getDownloadUrl()
实际上并没有返回 URL。如果您向其添加侦听器,它会异步返回一个任务,该任务将为您提供 URL。只有在将 URL 传递给侦听器后,您才能获得该 URL,并且您无法保证该 URL 何时完成。
我建议阅读其他问题的答案以获取更多详细信息和示例:如何从 Firebase Storage getDownloadURL 获取 URL
另一种选择是使用FirebaseUI Storage作为 Glide 的插件,它将为您完成大部分艰苦的工作。
推荐阅读
- c# - 如何在 C# 中设置为 List 类对象的属性值
- python - python - 如何将文本放入python中的悬停框
- html - Owl Carousel Slider w/ autoWidth(初始猫头鹰阶段问题)
- initialization - AnyLogic 在 Sim 运行前初始化参数
- python - 在 python statsd 库中实现标签?
- python - 根据 Pandas Dataframe 中的条件,将特定值与一系列列相乘
- mysql - sql查询使用名称每天都在变化的表
- mysql - Docker - 在构建阶段安全地设置 MySQL/MariaDB 根密码
- java - 检查函数的返回类型
- c# - Is there a way to include a .resx file globally?