【问题标题】:Firebase Storage and Android imagesFirebase 存储和 Android 映像
【发布时间】:2017-10-05 05:35:36
【问题描述】:

所以我想基本上从 Firebase 存储中获取图像(我将规则设置为公开)。

这就是我所拥有的

    ImageView image = (ImageView)findViewById(R.id.imageView);
    Glide.with(this)
    .load("https://firebasestorage.googleapis.com/v0/b/test-7c916.appspot.com/o/images.jpg?alt=media&token=b207cb11-9ad5-48e3-86ac-1dcb07ee6013")
    .into(image);

我没有使用 https 链接。我想使用存储参考。但是每次我尝试使用存储引用时,我的应用程序都会崩溃。 请帮忙。

就像 .child() 方法一样。

【问题讨论】:

  • 您能否提供您的应用程序崩溃的错误日志。因此,它将帮助我们更快地计算崩溃。

标签: android firebase firebase-storage android-glide


【解决方案1】:

您需要使用StorageReference 来加载 Firebase 存储映像。

   // Reference to an image file in Cloud Storage
StorageReference storageReference = = FirebaseStorage.getInstance().getReference().child("myimage");


ImageView image = (ImageView)findViewById(R.id.imageView);

// Load the image using Glide
Glide.with(this /* context */)
        .using(new FirebaseImageLoader())
        .load(storageReference)
        .into(image );

更多详情可以查看Using FirebaseUI to download and display images。

【讨论】:

  • 虽然使用 Firebase SDK 中的 StorageReference 确实是从 Cloud Storage 下载的一种方式,但还有一个公开可读的、不可猜测的下载 URL。这就是 Alexei 在这里使用的,因此它应该适用于任何可以从 HTTPS 下载的库。
  • 感谢您提供有关访问 Firebase 存储的更多信息。因此,对于 Alexei 案例,我们需要弄清楚应用程序崩溃的原因。
  • 当我尝试这个 FirebaseImageLoader 不显示为蓝色?我不能使用它?我的应用仅限 xamarin.android
  • @pRaNaY 你能告诉我应该使用哪个版本和什么类型的Glide 库吗?现在我尝试了glide-full-4.6.1.jar和glide-full-4.5.0.jar,但是没有using()和类FirebaseImageLoader()这样的方法...
【解决方案2】:

于是就这样使用了pRaNaY的代码

    StorageReference storageReference = FirebaseStorage.getInstance().getReference().child("images.jpg");
    ImageView image = (ImageView)findViewById(R.id.imageView);
    Glide.with(this).using(new FirebaseImageLoader()).load(storageReference).into(image );

我想使用引用的原因是因为我将在一个 txt 文件中拥有所有图像的名称,我将从它读取图像的名称并创建一个 while 循环以将我需要的所有图像加载到右侧地点。

还有一个问题,不检查 ImageView 是否为空,我如何知道图像是否为空?

【讨论】:

    【解决方案3】:

    把这个类FirebaseImageLoader.java放到你的源码中,或者自己写。

    在您的应用源中的任何位置创建一个类,如下所示。

    @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());
        }
    }
    

    您想要加载图像代码的位置,如下所示。

    StorageReference storageReference = FirebaseStorage
                                        .getInstance().getReference().child("myimage");
    
    Glide.with(getApplicationContext())
          .load(completeStorageRefranceToImage)
          .into(imageView);
    

    Please refer for more details.

    【讨论】:

    • 小记:还要清理项目,然后进行构建。之后一切都应该工作。
    猜你喜欢
    • 2017-08-28
    • 2017-10-01
    • 1970-01-01
    • 2018-07-04
    • 2018-11-21
    • 2021-09-21
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多