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 ViewHolderum 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.

War es hilfreich?

Lösung

Versuche dies.Das könnte Ihnen helfen.

 byte[] pic=(cursor.getBlob(position));   
  ByteArrayInputStream imageStream = new ByteArrayInputStream(pic);
  Bitmap theImage= BitmapFactory.decodeStream(imageStream);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top