2012-02-06 46 views
0

我想顯示存儲在我的數據庫中的圖像顯示的圖像,但是我的程序拋出異常(CursorIndexOutOfBoundsException:指數-1要求,大小爲100)。 我使用this,並在本教程中我已成功地插入圖像到數據庫中,但他們retreiving的問題。 試圖從谷歌和StackOverflow找到答案,我也遇到了以下問題。 Qustion1 Qustion2。但是這些問題並不能幫助我的case.Any幫助,將不勝感激。如何從數據庫

以下是我的代碼。

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

這裏是一個插入圖像

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

在此先感謝

+1

這可能是更好的尋找到存儲只是在數據庫中的圖像路徑。然後將圖像存儲在圖像文件夾中。 – NeverPhased 2012-02-06 22:46:08

+0

嗨,這些圖像來自網絡,而不是在任何文件夾。 – SomCollection 2012-02-06 23:15:09

回答

1

試試這個CLASE:您可以先在光標得到任何

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

@腦,感謝烏拉圭回合的答覆但是這並沒有阻止例外,目前我得到這個(02-06 23:09:50.057:E/AndroidRuntime(2384):了java.lang.RuntimeException:無法啓動活動ComponentInfo {com.guid/com.guid.Image}:android.database.CursorIndexOutOfBoundsException:請求的索引-1,大小爲220)來自LogCat。 – SomCollection 2012-02-06 23:12:53

+0

等等......你將'cursor.movetoFirst()'註釋掉了。嘗試在'getBlob()'之前放一個。 – 2012-02-06 23:42:18

+0

@ Brain,感謝您的銳利眼光和專業知識,這是通過移動光標先停止異常。 – SomCollection 2012-02-07 10:41:59

0

,我很確定你必須用moveToFirst()來設置光標的位置。這可以解釋爲什麼它認爲它的索引是-1。遊標尚未設置爲查詢行列表的開頭。

而且布萊恩杜普伊斯的回答描述了一個更好的(更安全)的方式得到一個行列,通過getColumnIndex()

+0

,許多thnaks問題現在排序。 – SomCollection 2012-02-07 10:43:12