Отображение изображения из базы данных sqlite с использованием курсора в android
Я хочу отображать изображение в представлении изображения из базы данных sqlite с помощью курсора. Я использовал ниже код для извлечения изображения, но я не могу отображать изображение в представлении изображения.
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);
кроме изображения, имени и цены будет отображаться, но изображение не будет отображаться.
любое предложение или код, которые помогут мне решить эту проблему.
Пожалуйста, помогите мне.
Спасибо заранее.
Ответы
Ответ 1
Я попытался использовать Stream вместо байтового массива, мой пример просто работает для меня.
Также попробуйте использовать Cursor.getColumnIndex()
byte[] blob = c.getBlob(c.getColumnIndex(YourDB.IMAGE));
ByteArrayInputStream inputStream = new ByteArrayInputStream(blob);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
Здесь мой оператор "create table", pls double check yours
create table datatable(_id INTEGER PRIMARY KEY AUTOINCREMENT, image BLOB, price INTEGER);
Ответ 2
попробуйте это
объект курсора;//курсор
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);
}
Ответ 3
Прежде всего, пожалуйста, не сохраняйте изображения в базе данных, потому что sqlite не будет поддерживать более 1 мб, я могу ошибаться, изображения должны храниться в активах или папке с прокруткой, а имя изображений должно храниться в базе данных, тогда вы может получить его от имени до преобразования ресурсов по коду
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());
Надеюсь, это поможет вам.
Ответ 4
Я хочу показать изображение BLOB-объекта из базы данных с помощью курсора. Но, к счастью, это не работает. Кто-нибудь может мне помочь, пожалуйста
byte[] blob = cursor.getBlob(cursor.getColumnIndex("product_image" ));
ByteArrayInputStream inputStream = new ByteArrayInputStream(blob);/
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
byte[] image = cursor.getBlob(8);
Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0,image.length);
ImageView.setImageBitmap(bitmap);
Toast.makeText(this,"select success", Toast.LENGTH_SHORT).show();
productArrayList.add(product);
}