如何从数据库中显示图像

时间:2012-02-06 22:41:46

标签: android database

我想显示存储在我的数据库中的图像,但是我的程序抛出异常(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);

提前致谢

2 个答案:

答案 0 :(得分:1)

试试这个:

byte[] imageByteArray = cursor.getBlob(cursor.getColumnIndex(DBHelper.C_PHOTOS));

答案 1 :(得分:0)

在你从光标得到任何东西之前,我很确定你必须用moveToFirst()设置光标的位置。这可以解释为什么它认为它的索引是-1。光标尚未设置为查询行列表的开头。

同样,Brian Dupuis的回答描述了通过getColumnIndex()获得行列的更好(更安全)方式。