将Firebase Storage映像与Glide一起使用 [英] Using Firebase Storage image with Glide

查看:148
本文介绍了将Firebase Storage映像与Glide一起使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我几乎尝试了所有答案,但有很多重复的答案,但是我仍然无法在Glide中使用Firebase存储映像.

There are tons of duplicated answers I had tried almost all of them but I am still not able to use Firebase storage image with Glide.

首先我正在使用文档

    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会显示此错误:

if I clean the .using part of Glide, logcat it gives this error:

E/GlideExecutor:请求引发未捕获的可抛出com.bumptech.glide.Registry $ NoModelLoaderAvailableException:无法执行 查找模型的任何ModelLoader: 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)

E/GlideExecutor: Request threw uncaught throwable com.bumptech.glide.Registry$NoModelLoaderAvailableException: Failed to find any ModelLoaders for model: gs://123...appspot.com/sorular/1.jpg
at com.bumptech.glide.Registry.getModelLoaders(Registry.java:227)
at com.bumptech.glide.load.engine.DecodeHelper.getLoadData(DecodeHelper.java:179) at com.bumptech.glide.load.engine.DecodeHelper.getCacheKeys(DecodeHelper.java:197) at com.bumptech.glide.load.engine.ResourceCacheGenerator.startNext(ResourceCacheGenerator.java:41) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:282) at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:249) at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:222)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) at java.lang.Thread.run(Thread.java:761)
at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:347)

那么如何才能以最佳方式在我的android应用中使用firebase存储映像?

So how can use firebase storage images in my android app in a best way?

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

also this my build gradle dependencies:

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文档:

using()

在Glide 4中删除了using()API,以鼓励用户向AppGlideModule注册其组件一次,以避免重复使用对象.不必在每次加载图像时都创建一个新的ModelLoader,而是在AppGlideModule中将其注册一次,然后让Glide检查模型(传递给load()的对象)以弄清楚何时使用已注册的ModelLoader.

The using() API was removed in Glide 4 to encourage users to register their components once with a AppGlideModule to avoid object re-use. Rather than creating a new ModelLoader each time you load an image, you register it once in an AppGlideModule and let Glide inspect your model (the object you pass to load()) to figure out when to use your registered ModelLoader.

要确保仅对某些模型使用ModelLoader,请实施上述的handles()来检查每个模型,并仅在应使用ModelLoader时才返回true.

To make sure you only use your ModelLoader for certain models, implement handles() as shown above to inspect each model and return true only if your ModelLoader should be used.

using()已从Glide 4中删除.

using() was removed from Glide 4.

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

To Solve this, you need to do this: To load an image from a StorageReference, first register an 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中:

Once you have created an AppGlideModule class and done a clean build, you can use GlideApp to load a StorageReference into an 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

这篇关于将Firebase Storage映像与Glide一起使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆