una - seleccionar imagen de galeria android studio
Descargar y guardar imágenes usando Picasso (3)
Estoy tratando de mostrar mis noticias en un ListView personalizado. Cada noticia está incluida de algunas imágenes y quiero
1. descargar imágenes del servidor
2.save en almacenamiento local
3.save ruta de las imágenes en SQLite
4. Muestre imágenes en ListView usando mi adaptador personalizado.
Solo tengo problemas con los pasos 1 y 2 . Puedo obtener noticias del servidor y mostrarlas en mi ListView
y muestre imágenes de la memoria caché agregando el siguiente código en mi adaptador:
Picasso.with(context).load(image[position]).into(iv);
Al usar Picasso.with(context).load(image[position]).into(target)
, solo puedo guardar una
Imagen en almacenaje.
Por favor sugiéreme tu idea ...
ACTUALIZACIÓN : cuando uso el siguiente código, ¡solo se guarda una imagen (el último índice de mi matriz de imágenes)!
¿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) {
}
};
Aunque esta publicación es antigua, parece que la pregunta aún no ha sido respondida. Al leer su código, parece que la llamada que realiza a picasso podría ser asíncrona. Definitivamente, debe verificar que, como si fuera el caso, está iniciando tareas de image.length
, cambiando el nombre de archivo en cada nueva tarea, image.length
que todas las tareas se completen y guarden en el último nombre de archivo que se estableció. Para resolver esto, debe anular el constructor de destino y agregar un parámetro de nombre de archivo para que esté listo cuando finalice la tarea, en su oyente onBitmapLoaded
.
Intente poner la definición de "Objetivo objetivo" antes de "Picasso.with (this) .load (imagen [i]). En (target);".
PD Aquí uso este código y guardo bien las imágenes. 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 del teléfono.
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"));