Java 将Firebase存储映像与Glide一起使用
有很多重复的答案,我已经尝试了几乎所有的答案,但我仍然无法将Firebase存储映像与Glide一起使用 首先,我正在使用 如果我使用Glide、logcat的一部分清洁。则会出现以下错误: E/GlideExecutor:请求抛出了未捕获的可丢弃com.bumptech.glide.Registry$NoModelLoaderAvailableException:未能 查找模型的任何模型加载程序: gs://123…appspot.com/sorular/1.jpgJava 将Firebase存储映像与Glide一起使用,java,android,firebase,android-glide,firebaseui,Java,Android,Firebase,Android Glide,Firebaseui,有很多重复的答案,我已经尝试了几乎所有的答案,但我仍然无法将Firebase存储映像与Glide一起使用 首先,我正在使用 如果我使用Glide、logcat的一部分清洁。则会出现以下错误: E/GlideExecutor:请求抛出了未捕获的可丢弃com.bumptech.glide.Registry$NoModelLoaderAvailableException:未能 查找模型的任何模型加载程序: gs://123…appspot.com/sorular/1.jpg 位于com.bumptec
位于com.bumptech.glide.Registry.getModelLoaders(Registry.java:227)
在 com.bumptech.glide.load.engine.decodeheloper.getLoadData(decodeheloper.java:179) 在 com.bumptech.glide.load.engine.decodeheloper.getCacheKeys(decodeheloper.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存储图像呢 这也是我的构建渐变依赖项:
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'
为此:
implementation 'com.firebaseui:firebase-ui-storage:3.2.1'
根据Glide文档:
使用()
Glide 4中删除了using()API,以鼓励用户向AppGlideModule注册组件一次,以避免对象重复使用。不是每次加载图像时都创建新的ModelLoader,而是在AppGlideModule中注册一次,让Glide检查模型(传递给load()的对象),以确定何时使用注册的ModelLoader
要确保仅对某些模型使用ModelLoader,请实现如上所示的handles(),以检查每个模型,并仅在应使用ModelLoader时返回true
using()
已从Glide 4中删除
要解决此问题,您需要执行以下操作:
要从StorageReference加载映像,请首先注册AppGlide模块:
@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);
此处的更多信息:至于Glide 4.6.1您不能使用
。使用(新的FirebaseImageLoader())
我被迫降级到
实现'com.github.bumptech.glide:glide:3.8.0'
和Firebase UI
实现'com.firebaseui:firebaseui存储:2.0.1'
上述答案对我没有帮助
我在毕业典礼上错过了这个
annotationProcessor 'com.github.bumptech.glide:compiler:4.x' //For Kotlin advice use kapt instead of annotationProcessor
我找到的最好的文档是如果你已经将图标的小图片上传到Firebase存储中,那么就去掉glide和那个“模型”。它在git上做了很多更改。因此,您的代码应该如下所示:
StorageReference referenseLcl = FirebaseStorage.getInstance().getReference();
StorageReference islandRefLcl = referenseLcl.child(userLcl.getImageIconPath());
final long ONE_MEGABYTE = 1024 * 1024;
islandRefLcl.getBytes(ONE_MEGABYTE).addOnSuccessListener(bytesPrm -> {
Bitmap bmp = BitmapFactory.decodeByteArray(bytesPrm, 0, bytesPrm.length);
imageOfUser.setImageBitmap(bmp);
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
imageOfUser.setImageResource(R.mipmap.ic_launcher);
}
});
我知道我有点晚了,但这可能对你们有些帮助。 在
app build.gradle
中同时使用这两个选项
implementation 'com.github.bumptech.glide:glide:4.10.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0' //For Kotlin You should use kapt instead of annotationProcessor though.
然后添加该类:
@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());
}
}
GlideApp.with(getActivity()).load(storageReference).into(profileImg);
最后,您需要转到文件->使缓存无效并重新启动 完成:)我正在使用kotlin 在我的例子中,因为我仍然像这样使用注释处理器
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
我应该使用:
kapt'com.github.bumptech.glide:compiler:4.11.0'
你能分享build.gradle
吗?我添加了依赖项,你需要降级版本吗?因为我已更改,但仍无法解析“.using(new firebaseMageLoader())”。在我看来,这个问题是关于你的。使用(…)的方法适用于glide 4.0版本,最后在github页面中,他们在firebaseui 3.0版本中添加了对glide 4.0的支持使用此glide库编译'com.github.bumptech.glide:glide:4.0.0-RC1'
@mehmet在更改后,然后重新同步、重建和清理您是否尝试过上述方法?您使用的glide版本是什么?编译'com.github.bumptech.glide:glide:4.0.0-RC1'实现'com.firebaseui:firebaseui存储:2.0.1'找不到模型的任何模型加载器仍然是相同的错误:如果(使用firebase ui 3.2.1应用程序不打开。降级不被视为解决方案。特别是因为您正在降级到非常旧的版本。“最后您需要转到文件->使缓存无效并重新启动”-保存我的2天!!!谢谢!!!!使用此方法的人:如果不使用Glide,我们需要管理缓存。
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'