我试图从Firebase存储中加载图像,但在使用Glide时出现异常。
我的代码
storageReference=FirebaseStorage.getInstance().getReference().child("profiles/"+firebaseUser.getUid()+"/"+"profilePic");
Glide.with(FinishIntroActivity.this)
.load(storageReference.getDownloadUrl())
.into(profileFinishImg);
我的Gradle
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交付给监听器后才会得到它,而且你不能保证何时完成。
我建议阅读这另一个问题的答案,以了解更多细节和例子。如何从Firebase存储中获取URL getDownloadURL?
另一种选择是使用 FirebaseUI存储 作为Glide的插件,它将为你做大部分的艰苦工作。