Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android Glide: ¿Cómo descargar y almacenar en caché los mapas de bits?

Estoy utilizando Glide para descargar y almacenar imágenes en caché en Android. Todo funciona bien, excepto el hecho de que no quiero cargar los mapas de bits directamente en el ImageView , no quiero tener la animación de fundido, ni los marcadores de posición de la imagen.

Todo lo que quiero es crear un método global que me ayude a descargar la imagen en toda la aplicación.

 public class MyApp extends Application { public static void downloadImage(String url, final OnImageLoadedCallback callback) { // And how to implement the listener ? RequestListener<String, Bitmap> requestListener = new RequestListener<String, Bitmap() { @Override public boolean onException(Exception exc, String string, Target<Bitmap> target, boolean isFirstResource) { callback.onDone(null); return false; } @Override public boolean onResourceReady(Bitmap bitmap, String string, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) { callback.onDone(bitmap); return false; } }; Glide.with(context) .load(url) .asBitmap() .dontAnimate() .diskCacheStrategy(DiskCacheStrategy.SOURCE) .listener(requestListener); } } 

El problema es que no sé cómo implementar el oyente. RequestListener no se llama en absoluto.

  • Caché de imágenes de Android: ¿cómo?
  • Glide: ¿Cómo encontrar si la imagen ya está en caché y utilizar la versión en caché?
  • ¿Cómo uso la caché de disco en Picasso?
  • ¿Cómo veo la caché específica de la aplicación de Android?
  • Clear Disk / SD Card Cache de la Biblioteca de imágenes de Picasso de Android
  • Cómo implementar mi propia caché de disco con la biblioteca picasso - Android?
  • 2 Solutions collect form web for “Android Glide: ¿Cómo descargar y almacenar en caché los mapas de bits?”

    Las cargas en Glide no empiezan hasta que hagas una llamada. La interfaz RequestListener observa las solicitudes, pero normalmente no se utiliza para manejar los resultados. En lugar de usar RequestListener, considere la posibilidad de que su devolución de llamada implemente la interfaz de destino y pase en utilizar en .

    Alternativamente, puedes simplemente extender SimpleTarget y pasarlo a cada solicitud de la misma manera que estás intentando usar RequestListener:

     Target target = Glide.with(context) ... .into(new SimpleTarget<Bitmap>(width, height) { @Override public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) { callback.onDone(resource); } @Override public void onLoadFailed(Exception e, Drawable errorDrawable) { callback.onDone(null); } }); // At some point later, if you want to cancel the load: Glide.clear(target); 

    Deberá proporcionar una anchura y una altura para que Glide pueda reducir la imagen y transformar las imágenes apropiadamente. También puedes ejecutar problemas con la cancelación si estás mostrando estos mapas de bits en las vistas, en cuyo caso recomendaría encarecidamente que la vista esté disponible para tu API de carga y pases la vista a la que manejaremos el tamaño y la cancelación para ti.

    Uso Glide 3.7.0 y descargar imágenes de esta manera:
    Es importante tener en cuenta – se ejecuta asincrónica

     Glide.with(this) .load(url) .downloadOnly(new SimpleTarget<File>() { @Override public void onResourceReady(File resource, GlideAnimation<? super File> glideAnimation) { LOGGER.debug("Photo downloaded"); } }); 

    Cuando necesito mostrar la imagen en caché, uso la misma url y DiskCacheStrategy.SOURCE :

     Glide.with(this) .load(url) .diskCacheStrategy(DiskCacheStrategy.SOURCE) .into(imageView); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.