2011-02-11 29 views
0

我有一個Sqlite數據庫,其中base64代碼字符串存儲爲BLOB。我想從數據庫中獲取這個BLOB並解碼base64並在ImageView中顯示圖像。 我已閱讀關於編碼和解碼base64,這就是我現在使用的。如何將base64 blob解碼爲位圖Android?

 String[] image = new String[100000]; 
     if (cursor.moveToFirst()){ 
      int i = 0; 

     do {image[i] = cursor.getString(1); 
     i++;} 

     while (cursor.moveToNext()); 
String imagebyte = image[0]; 
    byte[] decodedString = Base64.decode(imagebyte, Base64.DEFAULT); 
    Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
    mImage.setImageBitmap(decodedByte); 

但是什麼也沒有顯示,我也沒有收到任何錯誤信息。爲了查明問題,我嘗試編碼和解碼圖像,然後顯示位圖。這是解碼它的正確方法嗎?我在這裏使用cursor.getString(1),我也嘗試過使用getBlob(1),但仍然沒有顯示。我應該使用getString還是getBlob? 有沒有簡單的方法來檢查base64代碼的有效性?謝謝!

回答

0

我有一個Sqlite數據庫,其中base64代碼字符串存儲爲BLOB。

爲什麼?爲什麼不把圖像放在BLOB中?你通過Base64編碼獲得了什麼?這會花費CPU時間,垃圾收集時間和存儲空間。

String[] image = new String[100000]; 

爲什麼你認爲你需要100,000個String對象?

do {image[i] = cursor.getString(1); 
     i++;} 

     while (cursor.moveToNext()); 

你爲什麼要檢索此列在結果集中的所有行,如果你只使用其中的一個?特別是考慮到你顯然在主應用程序線程中執行了所有這些操作,因此最終會導致應用程序無響應(ANR)錯誤的崩潰?

此外,如果此列在數據庫中聲明瞭一個BLOB,那麼您確定getString()將按照您的預期工作嗎?

這是解碼它的正確方法嗎?

這將取決於你如何編碼它。

我應該使用getString還是getBlob?

這取決於您如何在表格中放入數據以及該列所具有的數據類型。他們都應該匹配。

但我只是擺脫所有的Base64的東西,並將圖像字節數組存儲在BLOB列,如果你想在表中的圖像。

+0

該列是數據類型BLOB。這是我必須處理的。因此,我正在尋找從數據庫獲取圖像的最佳方式。我一直在嘗試很多方法,猜想我迷路了。 – kakka47 2011-02-11 13:51:40