2010-12-03 11 views
12

Quiero mostrar la imagen en la vista de la imagen desde la base de datos sqlite usando el cursor. Utilicé el código siguiente para recuperar la imagen, pero no puedo mostrar la imagen en la vista de imagen.Mostrar la imagen de la base de datos sqlite usando el cursor 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); 

que no sea la imagen, el nombre y el precio se mostrarán pero la imagen no se mostrará. cualquier sugerencia o código que me ayudará a resolver este problema.

Por favor, ayúdame.

Gracias de antemano ..

+0

¿Cuál es el tipo de campo en la base de datos SQLite para su columna 'imagen'? – Brian

Respuesta

16

que he tratado de utilizar la corriente en lugar de matriz de bytes, la mía ejemplo, simplemente funciona para mí. Además, trate de usar Cursor.getColumnIndex()

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

Aquí está mi "crear la tabla" declaración, los pls doble Vea la suya

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

¿Pero por qué el primer enfoque no funcionó? –

+0

La primera suposición es simple, el recuento de columnas comienza con 1 y, por lo tanto, la columna idx = 2 es el precio, definitivamente no es blob. – ACM64

+0

Por qué decodeStream() en lugar de decodeByteArray (b, 0, b.length); –

1

tratar este objeto cursor; // el cursor

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

: Hola, si quieres ayudarme con eso http://stackoverflow.com/questions/15954896/how-to-save-image-taken-from-camera-and-show-it-to-listview-crashes- con-ille. Gracias – George

1

En primer lugar por favor, no almacenar las imágenes en la base de datos SQLite, ya no soportará más de 1 mb, puedo estar equivocado, las imágenes deben ser tienda en activos o carpeta drawble y el nombre de las imágenes deben almacenarse en la base de datos luego puede obtenerlo de conversión de nombre a recurso por código

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()); 

Espero que esto lo ayude.

Cuestiones relacionadas