J'essaie de montrer mon news dans un ListView personnalisé. Chaque news est inclus dans certains images et je souhaite
1.download images du serveur
2. enregistrer dans le stockage local
3.enregistrez chemin de images dans SQLite
4.show images dans ListView en utilisant mon adaptateur personnalisé.
J'ai juste un problème avec les étapes 1 et 2. Je peux obtenir news du serveur et les afficher dans mon ListView
et affichez images à partir du cache en ajoutant le code ci-dessous dans mon adaptateur:
Picasso.with(context).load(image[position]).into(iv);
En utilisant Picasso.with(context).load(image[position]).into(target)
, je peux juste en sauver un
image en stockage.
Suggérez-moi votre idée.
UPDATE: lorsque j'utilise le code ci-dessous, une seule image (le dernier index de mon tableau d'images) est enregistrée!
Comment puis-je enregistrer toutes les images d'un tableau avec ce code?!
@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) {
}
};
Essayez de mettre la définition "cible" avant "Picasso.with (this) .load (image [i]). Dans (cible);".
P.S. Ici, j'utilise ce code et enregistre bien les images. Merci quand même.
Mon code:
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);
Cible personnalisée pour stocker des photos dans la galerie du téléphone.
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"));
bien que ce message soit ancien, il semble que la question n’ait pas encore été posée . En lisant votre code, il semblerait que l’appel que vous avez fait à Picasso soit asynchrone . Vous devez absolument le vérifier, comme si c’était le Dans ce cas, vous démarrez des tâches image.length
, en modifiant le nom de fichier à chaque nouvelle tâche, en menant toutes les tâches à terme et en enregistrant le dernier nom de fichier défini . Pour résoudre ce problème, vous devez remplacer le constructeur Target et ajouter un paramètre filename afin prêt lorsque la tâche se termine, dans votre auditeur onBitmapLoaded
.