我想显示存储在我的数据库中的图像,但是我的程序抛出异常(CursorIndexOutOfBoundsException:索引-1请求,大小为100)。 我正在使用this,在本教程中,我设法将图像插入到数据库中,但是检索它们是个问题。 试图从谷歌和StackOverflow找到答案,我也遇到了以下问题。 Qustion1 Qustion2。但是这些问题对我的情况没有帮助。任何帮助都会感激不尽。
以下是我的代码。
db = helper.getWritableDatabase();
//select the data
//while(cursor.moveToFirst());
cursor = db.query(DBHelper.TABLE, new String[] {DBHelper.C_PHOTOS },
null, null, null, null, null);
//get it as a ByteArray
byte[] imageByteArray=cursor.getBlob(1);
//the cursor is not needed anymore
cursor.close();
//convert it back to an image
ByteArrayInputStream imageStream = new ByteArrayInputStream(imageByteArray);
Bitmap theImage = BitmapFactory.decodeStream(imageStream);
这是插入图像的clase
URL url = new URL("myurl");
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is,128);
ByteArrayBuffer baf = new ByteArrayBuffer(128);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
ContentValues v = new ContentValues();
v.put(DBHelper.C_PHOTOS,baf.toByteArray());
v.put(DBHelper.C_PHOTOS, photoThumbnailUrl);
db.insert(DBHelper.TABLE, null, v);
提前致谢
答案 0 :(得分:1)
试试这个:
byte[] imageByteArray = cursor.getBlob(cursor.getColumnIndex(DBHelper.C_PHOTOS));
答案 1 :(得分:0)
在你从光标得到任何东西之前,我很确定你必须用moveToFirst()
设置光标的位置。这可以解释为什么它认为它的索引是-1。光标尚未设置为查询行列表的开头。
同样,Brian Dupuis的回答描述了通过getColumnIndex()
获得行列的更好(更安全)方式。