Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Firebase存储映像与Glide一起使用_Java_Android_Firebase_Android Glide_Firebaseui - Fatal编程技术网

Java 将Firebase存储映像与Glide一起使用

Java 将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

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

首先,我正在使用

如果我使用Glide、logcat的一部分清洁。则会出现以下错误:

E/GlideExecutor:请求抛出了未捕获的可丢弃com.bumptech.glide.Registry$NoModelLoaderAvailableException:未能 查找模型的任何模型加载程序: gs://123…appspot.com/sorular/1.jpg
位于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'