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