2010-12-03 6 views
12

Je veux afficher l'image dans la vue de l'image à partir de la base de données sqlite en utilisant le curseur. J'ai utilisé le code ci-dessous pour récupérer l'image, mais je ne suis pas en mesure d'afficher l'image en imageview.Afficher l'image de la base de données sqlite en utilisant le curseur en android

Cursor c=this.db.query(TABLE_NAME, new String[] { "name","price","image" }, 
       null, null, null, null, null); 
name.setText(c.getString(0)); 
price.setText(c.getString(1)); 
byte b[]=c.getBlob(2); 
Bitmap bp=BitmapFactory.decodeByteArray(b, 0, b.length); 
ImageView image=(ImageView)findViewById(R.id.ImageView); 
//ByteArrayInputStream imageStream = new ByteArrayInputStream(b);    
//Bitmap theImage = BitmapFactory.decodeStream(imageStream); 
//image.setImageBitmap(theImage);    
image.setImageBitmap(bp); 

autres que l'image, le nom et le prix s'afficheront mais l'image ne s'affichera pas. toute suggestion ou code qui m'aidera à résoudre ce problème.

S'il vous plaît aidez-moi.

Merci à l'avance ..

+0

Quel est le type de champ dans la base de données SQLite pour votre colonne 'image'? – Brian

Répondre

16

J'ai essayé d'utiliser un jet au lieu de tableau d'octets, par exemple le mien fonctionne simplement pour moi. également essayer d'utiliser Cursor.getColumnIndex()

byte[] blob = c.getBlob(c.getColumnIndex(YourDB.IMAGE)); 
    ByteArrayInputStream inputStream = new ByteArrayInputStream(blob); 
    Bitmap bitmap = BitmapFactory.decodeStream(inputStream); 

Voici ma déclaration "create table", pls vérifier une deuxième fois à vous

create table datatable(_id INTEGER PRIMARY KEY AUTOINCREMENT, image BLOB, price INTEGER); 
+0

Mais pourquoi la première approche n'a pas fonctionné? –

+0

Première supposition est simple, le nombre de colonnes commence par 1 et donc la colonne idx = 2 est le prix, certainement pas blob. – ACM64

+0

Pourquoi decodeStream() au lieu de decodeByteArray (b, 0, b.length); –

1

essayer cet objet curseur ; // votre curseur

mImageView.setImageBitmap(getImageFromBLOB(object.getBlob(object.getColumnIndex("book_thumb")))); 

    public static Bitmap getImageFromBLOB(byte[] mBlob) 
    { 
     byte[] bb = mBlob; 
     return BitmapFactory.decodeByteArray(bb, 0, bb.length); 
    } 
+0

: Bonjour, si vous voulez m'aider avec ça http://stackoverflow.com/questions/15954896/how-to-save-image-taken-from-camera-and-show-it-to-listview-crashes- avec-ille. Merci – George

1

tout d'abord s'il vous plaît ne pas enregistrer les images dans la base de données, car sqlite ne soutiendra pas plus de 1 mb, je peux me tromper, les images doivent être stocker dans des actifs ou le dossier drawble et le nom de les images doivent être stocker dans la base de données, vous pouvez l'obtenir à partir de nom à la conversion des ressources par code

String videoFileName= c.getString(c.getColumnIndex(TB_SETTING_VIDEOFILENAME)); 
     int dot = videoFileName.lastIndexOf("."); 
     videoFileName=videoFileName.substring(0,dot); 
     Log.d("VIDEOFILENAME", videoFileName); 

     int videoFileRId = getResources().getIdentifier(videoFileName , "raw", getPackageName()); 

J'espère que cela vous aidera.

Questions connexes