Un problème rencontré lors de mes différents développements à été d’afficher des images provenant d’un champs Blob(SQlite) dans une zone image d’une listView.
Pour se faire, il faut tout d’abord créer une classe que j’appellerai ici « MyViewBinder », en voici donc le code :
import android.graphics.Bitmap;
import android.view.View;
import android.widget.ImageView;
import android.widget.SimpleAdapter.ViewBinder;
public class MyViewBinder implements ViewBinder
{
public boolean setViewValue(View view, Object data,String textRepresentation)
{
if( (view instanceof ImageView) & (data instanceof Bitmap) )
{
ImageView iv = (ImageView) view;
Bitmap bm = (Bitmap) data;
iv.setImageBitmap(bm);
return true;
}
return false;
}
}
Il faut ensuite déclarer classiquement un HashMap mais de la façon suivante :
ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>(); //Déclaration de l'ArrayList qui recevra la liste de HashMap
HashMap<String, Object> map; //Déclaration du HashMap
map = new HashMap<String, Object>();
Vous pouvez ensuite y insérer l’image stocker dans un Bitmap de la façon suivante :
Le tout devra donc être dans un boucle pour remplir les différentes case de la listView
image = c.getBlob(3); //Récupération du Blob
bmp = BitmapFactory.decodeByteArray(image,0,image.length, null); //Conversion en Bitmap
map.put("img",bmp); //Mettre l'image dans le HashMap
listItem.add(map); //Mettre chaque HashMap dans l'ArrayList
Et enfin, l’affichage de tout cela
SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem,R.layout.affichageitem,
new String[] {"img", "ville", "type","prix","id"}, new int[] {R.id.img, R.id.ville, R.id.type,R.id.prix,R.id.id});
mSchedule.setViewBinder(new MyViewBinder());
listView.setAdapter(mSchedule);
Bien sûr, ce fonctionne marche également très bien pour les images provenant d’URLs externe.
Source : http://www.developpez.net/forums/d1032626/java/general-java/java-mobiles/android/prendre-image-url-afficher-utilisant-listview/