Bilder aus der Android-Datenbank abrufen
-
28-10-2019 - |
Frage
Ich habe ein gridview
wo Bilder angezeigt werden sollen.Ich habe alle Bilder in Datenbanken als Blobs gespeichert.Ich verwende ein hashmap
und es hinzufügen arraylist
.Zu jedem Bild habe ich auch einen Titel.Mein Code ist wie folgt:
ArrayList<HashMap<String, Object>> mylist = new ArrayList<HashMap<String, Object>>();
Cursor cr = dbAdapter.fetchAllMenuData();
HashMap<String, Object> map ;
cr.moveToFirst();
int k=0;
while(!cr.isAfterLast())
{
map= new HashMap<String,Object>();
map.put("Image", cr.getBlob(cr.getColumnIndex("Image")));
map.put("Title", cr.getString(cr.getColumnIndex("Title")));
k++;
mylist.add(map);
map=null;
cr.moveToNext();
}
MySimpleAdapter adapter = new MySimpleAdapter(Menu.this, mylist,
R.layout.menugrid, new String[] { "Title", "Image" },
new int[] { R.id.item_title, R.id.img });
list.setAdapter(adapter);
Das Bild hat nun die Form byte[]
.
Ich verwende ein ViewHolder
um das jeweilige Bild und den Titel auf ein festzulegen item
im gridview
.Der Code lautet wie folgt
holder.textView1.setText(mData.get(position).get("Title")
.toString());
// holder.textView2.setText(mData.get(position).get("Description").toString());
byte[] blob= toByteArray(mData.get(position).get("Image"));
Bitmap bt=BitmapFactory.decodeByteArray(blob,0,blob.length);
holder.imageView1.setImageBitmap(bt);
Das Problem ist das hashmap
ist wie HashMap<String, Object>
Also musste ich eine Methode schreiben, die Object in ein Byte-Array konvertiert.Die Methode ist wie folgt:
public byte[] toBitmap (Object obj)
{
byte[] bytes = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
oos.close();
bos.close();
bytes = bos.toByteArray ();
return bytes;
}
catch (IOException ex) {
return null; //TODO: Handle the exception
}
Diese Methode kehrt zurück byte[]
korrekt.Aber ich könnte es in eine Bitmap konvertierenBitmapFactory.decodeByteArray(blob,0,blob.length);
kehrt zurück null
.Konnte es also nicht einstellen imageview
.
Lösung
Versuche dies.Das könnte Ihnen helfen.
byte[] pic=(cursor.getBlob(position));
ByteArrayInputStream imageStream = new ByteArrayInputStream(pic);
Bitmap theImage= BitmapFactory.decodeStream(imageStream);