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


Descargar y guardar imágenes con Picasso

Estoy intentando mostrar mis noticias en un ListView personalizado. Cada noticia está incluida en algunas imágenes y quiero

1. descarga de imágenes desde el servidor

  • ¿Cómo podemos crear hilanderos similares a iPhone en android?
  • Android ¿Cómo se obtiene memoria RAM total en el dispositivo?
  • Appcompat_v7: Error al recuperar el padre del elemento: No se encontró ningún recurso que coincida con el nombre dado
  • ¿Cómo usar el proveedor de contenido de SMS? ¿Dónde están los documentos?
  • AssertionError en Gson EnumTypeAdapter cuando se utiliza Proguard Obfuscation
  • ¿Cómo puedo configurar el estado seleccionado de un botón de imagen con xml
  • 2. Guardar en almacenamiento local

    3.Save ruta de las imágenes en SQLite

    4.Muestra imágenes en ListView utilizando mi adaptador personalizado.

    Sólo tengo problemas con los pasos 1 y 2 . Puedo obtener noticias del servidor y mostrarlas en mi ListView

    y mostrar imágenes de caché por agregar debajo de código en mi adaptador:

    Picasso.with(context).load(image[position]).into(iv); 

    Utilizando Picasso.with(context).load(image[position]).into(target) , sólo puedo guardar una

    imagen almacenada.

    Por favor sugiera su idea …

    ACTUALIZACIÓN : Cuando utilizo código inferior, sólo una imagen (último índice de mi matriz de imágenes) se guarda!

    ¿Cómo puedo guardar todas las imágenes en matriz con este código?

     @Override protected void onPostExecute(Void result) { SaveImages(); pDialog.dismiss(); super.onPostExecute(result); } String fileName = null; public void SaveImages() { for(int i = 0; i < image.length; i++) { Picasso.with(this).load(image[i]).into(target); fileName = "image-" + i + ".jpg"; } } Target target = new Target() { @Override public void onPrepareLoad(Drawable arg0) { } @Override public void onBitmapLoaded(Bitmap bitmap, LoadedFrom arg1) { File file = new File(Environment.getExternalStorageDirectory().getPath() +"/" + fileName); try { file.createNewFile(); FileOutputStream ostream = new FileOutputStream(file); bitmap.compress(CompressFormat.JPEG, 75, ostream); ostream.close(); } catch (Exception e) { e.printStackTrace(); } } @Override public void onBitmapFailed(Drawable arg0) { } }; 

  • MAT (Eclipse Memory Analyzer) - cómo ver los mapas de bits del volcado de memoria
  • Android: ¿Cómo puedo añadir enlaces HTML dentro de un ListView?
  • Conversión de RemoteView en una vista
  • ListFragment onItemClickListener no funciona
  • Java.lang.VerifyError IllformedLocaleException
  • GetActivity () donde se define?
  • 3 Solutions collect form web for “Descargar y guardar imágenes con Picasso”

    Trate de poner la definición de "Target target" antes de "Picasso.with (this) .load (image [i]).

    PS Aquí utilizo este código y guardar imágenes así. Gracias de cualquier manera.

    Mi código:

      final String fileName = mDataset.get(i).getAid() + ".jpg"; Target target = new Target() { @Override public void onPrepareLoad(Drawable arg0) { return; } @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom arg1) { try { File file = null; // judge "imgs/.nomedia"'s existance to judge whether path available if(LightCache.testFileExist(GlobalConfig.getFirstStoragePath() + "imgs" + File.separator +".nomedia") == true) file = new File(GlobalConfig.getFirstStoragePath() + "imgs" + File.separator + fileName); else file = new File(GlobalConfig.getSecondStoragePath() + "imgs" + File.separator + fileName); file.createNewFile(); FileOutputStream ostream = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.JPEG, 80, ostream); ostream.close(); } catch (Exception e) { e.printStackTrace(); } } @Override public void onBitmapFailed(Drawable arg0) { return; } }; Picasso.with(GlobalConfig.getContext()) .load(Wenku8API.getCoverURL(mDataset.get(i).getAid())) .into(target); 

    Objetivo personalizado para almacenar fotos en la galería de teléfonos.

     public class TargetPhoneGallery implements Target { private final WeakReference<ContentResolver> resolver; private final String name; private final String desc; public TargetPhoneGallery(ContentResolver r, String name, String desc) { this.resolver = new WeakReference<ContentResolver>(r); this.name = name; this.desc = desc; } @Override public void onPrepareLoad (Drawable arg0) { } @Override public void onBitmapLoaded (Bitmap bitmap, LoadedFrom arg1) { ContentResolver r = resolver.get(); if (r != null) { MediaStore.Images.Media.insertImage(r, bitmap, name, desc); } } @Override public void onBitmapFailed (Drawable arg0) { } } Picasso.with(context).load(image[position]).into(new TargetPhoneGallery(view.getContentResolver(), "image name", "image desc")); 

    aunque este post es antiguo, parece que la pregunta aún no ha sido contestada. Leyendo su código, parece que la llamada que usted hace a Picasso podría ser asincrónica. Deberías comprobar que, como si fuera el caso, estás iniciando image.length tareas de image.length , cambiando el nombre de archivo en cada nueva tarea, llevando todas las tareas a completar y guardando el último nombre de archivo que se estableció. Para solucionar esto, debe reemplazar al constructor Target y agregar un parámetro filename para que esté listo cuando la tarea termine, en su listener onBitmapLoaded .

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.