1

Я знаю, что существует решение, когда люди говорят, что с помощью кэширования изображений инструментов, таких как Glide или Пикассо, вы можете отображать изображения. Но я пробовал то же самое, и это не сработает.Android Glide и Volley: Невозможно отобразить изображения, сохраненные в Firebase Хранение

Вот моя реализация загрузки файлов Firebase хранения

if (uri != null) { 
     //upload to storage 
     StorageReference riversRef = imagesRef.child(uri.getLastPathSegment()); 
     UploadTask uploadTask = riversRef.putFile(uri); 
     // Register observers to listen for when the download is done or if it fails 
     uploadTask.addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception exception) { 
       // Handle unsuccessful uploads 
       Snackbar.make(coordinatorLayout, "Unable to process your request. Please try again.", Snackbar.LENGTH_SHORT).show(); 
      } 
     }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
      @Override 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
       // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL. 
       Uri downloadUrl = taskSnapshot.getMetadata().getDownloadUrl(); 
       if (downloadUrl != null) { 
        Date date = new Date(); 
        Locale locale = new Locale("en", "IN"); 
        SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy /h:mm a", locale); 
        String formattedDate = sdf.format(date); 

        HashMap<String, String> map = new HashMap<>(); 
        map.put("isXRead", String.valueOf(false)); 
        map.put("isYRead", String.valueOf(true)); 
        map.put("imgUrl", String.valueOf(downloadUrl)); 
        map.put("timestamp", formattedDate); 
        map.put("user", "X"); 
        ref.push().setValue(map); 
       } 
      } 
     }); 
    } 

Изображение получает закачанный хорошо и возвращает URL, похожий на

https://firebasestorage.googleapis.com/v0/b/private.appspot.com/o/Messenger_images%2F14076?alt=media&token=2164ec58-55c2-4b03-b97a-ebfd36e66593 

Вот как я пытаюсь отобразить изображение с использованием Волейбола:

ImageRequest ir = new ImageRequest(message.getImgUrl(), new Response.Listener<Bitmap>() { 
      @Override 
      public void onResponse(Bitmap response) { 
       // callback 
       // new GlideOperations(context, img).glideMessenger(response); 
       img.setImageBitmap(response); 
      } 
     }, 100, 100, null, null); 
     //ir.setShouldCache(false); 
     AppController.getInstance().addToRequestQueue(ir); 

Вот как я пытаюсь отобразить изображение, используя Glide:

try { 
     Glide.with(mContext) 
       .load(object) 
       .thumbnail(0.5f) 
       .override(900, 400) 
       .crossFade(100) 
       .fitCenter() 
       .error(R.drawable.wallpaper) 
       .into(new SimpleTarget<GlideDrawable>() { 
        @Override 
        public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) { 
         try { 
          mImageView.setImageDrawable(resource); 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
        } 
       }); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

Ничего из вышеперечисленного не работает. Цените любую помощь.

Решение Похоже, у меня была проблема с ImageView я использовал. Спасибо за вашу помощь.

+0

У меня довольно много опыта использования памяти Пикассо и Firebase, я мог бы помочь, если вы готовы дать Пикассо еще одну попытку, дайте мне знать. – RamithDR

+0

Прошу прощения, но скольжение кажется намного более эффективным. – silverFoxA

+0

Чтобы загрузить изображение, хранящееся в хранилище Firebase, в imageView с использованием glide, я использую класс 'FirebaseImageLoader' из [ответа этого потока от Samuel] (https://groups.google.com/forum /? hl = en #! topic/firebase-talk/IrJACH038DI), он отлично работает, и вам не нужно получать прямой публичный URL-адрес этого изображения – Wilik

ответ

7

Библиотека com.firebaseui:firebase-ui-storage:0.6.0 включает в себя возможность загрузки изображений хранилища Firebase с использованием Glide.

// Reference to an image file in Firebase Storage 
StorageReference storageReference = ...; 

// ImageView in your Activity 
ImageView imageView = ...; 

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

, пожалуйста, помогите мне в этом выпуске http://stackoverflow.com/q/42480626/3671509 –