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

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) { } }; 

  • Actualizar / cambiar el mapa de bits en caché utilizando Picasso y OkHttp
  • Fade in animation while loading image Uso de Picasso
  • Cargar mapa de bits con Picasso
  • ¿Cómo funciona la caché HTTP de Android?
  • Picasso Cargar imagen desde el sistema de archivos
  • ¿Puedo cargar una imagen con Picasso en la barra de acción?
  • Cómo cargar un mapa de bits con Picasso sin usar un ImageView?
  • ¿Cómo integrar Google Drive con Picasso en Android?
  • 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.