【问题标题】:Getting image from Firebase Storage从 Firebase 存储中获取图像
【发布时间】:2017-12-29 14:56:05
【问题描述】:

我是整个 Firebase 存储概念的新手。

我做了一些研究,发现了这个滑翔机。用于将图像添加到 imageView。现在它给了我这个错误。

我该如何解决?

还有其他方法吗?

24 09:39:00.286 14919-14919/azcrew.eatapp E/AndroidRuntime: FATAL EXCEPTION: main
  Process: azcrew.eatapp, PID: 14919
  java.lang.IllegalArgumentException: Unknown type class com.google.firebase.storage.StorageReference. You must provide a Model of a type for which there is a registered ModelLoader, if you are using a custom model, you must first call Glide#register with a ModelLoaderFactory for your custom model class
    at com.bumptech.glide.RequestManager.loadGeneric(RequestManager.java:629)
    at com.bumptech.glide.RequestManager.load(RequestManager.java:598)
    at azcrew.eatapp.halfdone.Cari$2.onSuccess(Cari.java:76)
    at azcrew.eatapp.halfdone.Cari$2.onSuccess(Cari.java:73)
    at com.google.android.gms.tasks.zzj.run(Unknown Source)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:155)
    at android.app.ActivityThread.main(ActivityThread.java:5696)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

这里是代码

StorageReference mStorageRef = FirebaseStorage.getInstance().getReference();
final StorageReference imgRef = mStorageRef.child("images/img.jpg");
final long ONE_MEGABYTE = 1024*1024;


imgRef.getBytes(ONE_MEGABYTE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
    @Override
    public void onSuccess(byte[] bytes) {
        Glide.with(Cari.this).load(imgRef).diskCacheStrategy(DiskCacheStrategy.ALL).into(kuryerImg);
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {

    }
});

【问题讨论】:

    标签: android firebase firebase-storage


    【解决方案1】:

    使用FirebaseImageLoader

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

    【讨论】:

      【解决方案2】:

      我有其他方法可以解决问题。

      您可以获得图片的下载网址。 这是来自 Google 指南的代码。

      StorageReference storageRef = 
        FirebaseStorage.getInstance().getReference();    
       storageRef.child("users/me/profile.png").getDownloadUrl()
      .addOnSuccessListener(new OnSuccessListener<Uri>() {
      @Override
      public void onSuccess(Uri uri) {
          // Got the download URL for 'users/me/profile.png'
          })
      .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
          // Handle any errors
         }
      });
      

      如果您需要将图像下载到设备的指南,这里有一个 Stackoverflow 链接: Download Image from URL

      【讨论】:

      • 但我不想用户下载并保存别人的照片到他的手机
      • 抱歉,我不知道你到底想做什么。你能描述一下你打算做什么吗?
      • 这个网址不会自动下载你的图片。这将为您提供保存在 Firebase 存储中的图片的直接链接。
      • 我现在明白了。您想保存到内存中,并且仅将其用于将其绘制到屏幕上。
      【解决方案3】:

      使用通用加载器而不是使用滑动,它加载图像比滑动更快

         DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
              .cacheOnDisc(true).cacheInMemory(true)
              .imageScaleType(ImageScaleType.EXACTLY)
              .displayer(new FadeInBitmapDisplayer(300)).build();
      
      ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
              getApplicationContext())
              .defaultDisplayImageOptions(defaultOptions)
              .memoryCache(new WeakMemoryCache())
              .discCacheSize(100 * 1024 * 1024).build();
      
      ImageLoader.getInstance().init(config);
      
      final ImageLoader imageLoader = ImageLoader.getInstance();
      
      final DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true)
              .cacheOnDisc(true).resetViewBeforeLoading(true)
              .showImageForEmptyUri(R.mipmap.preview)
              .showImageOnFail(R.mipmap.preview)
              .build();
      
      
       mdatabase.child(Table_item).addValueEventListener(new ValueEventListener() {
      
      
          @Override
          public void onDataChange(DataSnapshot dataSnapshot) {
              Map map = (Map) dataSnapshot.getValue();
              String image1 = (String) map.get("imagename");
              String image2 = (String) map.get("image2name");
              imageLoader.displayImage(ImageView1, image1, options, new ImageLoadingListener() {
      
                  @Override
                  public void onLoadingStarted(String imageUri, View view) {
      
                  }
      
                  @Override
                  public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                      progressBar.setVisibility(View.GONE);
                  }
      
                  @Override
                  public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
      
      
                  }
      
                  @Override
                  public void onLoadingCancelled(String imageUri, View view) {
                      progressBar.setVisibility(View.GONE);
                  }
              });
              imageLoader.displayImage(ImageView2, image2name, options, new ImageLoadingListener() {
                  @Override
                  public void onLoadingStarted(String imageUri, View view) {
      
                  }
      
                  @Override
                  public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                      progressBar.setVisibility(View.GONE);
                  }
      
                  @Override
                  public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                      i++;
                      progressstatus(i);
                  }
      
                  @Override
                  public void onLoadingCancelled(String imageUri, View view) {
                      progressBar.setVisibility(View.GONE);
      
                  }
              });
      

      使用以下依赖:

      compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
      

      【讨论】:

        猜你喜欢
        • 2020-04-23
        • 2021-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-21
        • 2020-02-12
        相关资源
        最近更新 更多