我想使用游标从sqlite数据库中显示imageview中的图像。我使用下面的代码来检索图像,但我无法在imageview中显示图像。
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);
除图像外,将显示名称和价格,但不显示图像。 任何可以帮助我解决这个问题的建议或代码。
请帮帮我。
提前致谢..
答案 0 :(得分:18)
我尝试使用Stream而不是字节数组,我的例子对我来说很有用。 还尝试使用Cursor.getColumnIndex()
byte[] blob = c.getBlob(c.getColumnIndex(YourDB.IMAGE));
ByteArrayInputStream inputStream = new ByteArrayInputStream(blob);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
这是我的“创建表”声明,请仔细检查你的
create table datatable(_id INTEGER PRIMARY KEY AUTOINCREMENT, image BLOB, price INTEGER);
答案 1 :(得分:1)
试试这个 游标对象; //你的光标
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);
}
答案 2 :(得分:1)
首先请不要将图像存储在数据库中,因为sqlite不支持超过1 mb,我可能错了,图像应该存储在资源或drawble文件夹中,图像名称应该存储在数据库中然后你可以通过代码从名称到资源转换获取它
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());
我希望这会对你有所帮助。