2013-05-30 77 views
0

我試圖將存儲爲SQLite數據庫中的BLOB數據的圖像存儲到用於列表活動的行中的Imageview中。從數據庫表到列表視圖的BLOB圖像

這是我的兩個方法我採用拉常規文本數據代碼:

private void fillData() { 
// TODO Auto-generated method stub 

String[] from = new String[] { BorrowMeTable.COLUMN_NAME, BorrowMeTable.COLUMN_DATE };  

int[] to = new int[] { R.id.people_list_name, R.id.people_list_borrowed }; 

getLoaderManager().initLoader(0, null, this); 
adapter = new SimpleCursorAdapter(this, R.layout.people_row, null, from, 
     to, 0); 

setListAdapter(adapter); 

} 

// ----------------------------------------------------------- 


@Override 
public Loader<Cursor> onCreateLoader(int id, Bundle args) { 

    BorrowMeContentProvider.distinctSwitch = true; 

    String[] projection = { BorrowMeTable.COLUMN_ID, BorrowMeTable.COLUMN_NAME, BorrowMeTable.COLUMN_DATE }; 
    CursorLoader cursorLoader = new CursorLoader(this, 
     BorrowMeContentProvider.CONTENT_URI, projection, null, null, null); 
    return cursorLoader; 
} 

我有另一列,BorrowMeTable.COLUMN_IMAGE我想加載到我的ImageView(R.id.pic_of_image )。我無法將其添加到我的投影中,因爲它無法轉換爲字符串。要使用單個光標拉它,我會使用代碼:

byte[] imageByteArray = databaseCursor.getBlob(databaseCursor 
    .getColumnIndex(BorrowMeTable.COLUMN_IMAGE)); 
ByteArrayInputStream imageStream = new ByteArrayInputStream(
    imageByteArray); 
bmp = BitmapFactory.decodeStream(imageStream); 
    window.setImageBitmap(bmp); 

正如我在另一部分程序中所做的那樣。任何人都可以幫助我如何做這項工作?

謝謝!

+0

你的錯誤是什麼?並把logcat,所以我們可以幫助你。 – Riser

+0

@Segi我真的在問我如何修改我的fillData以適應我的圖像。當我嘗試將存儲我的BLOB數據的列添加到投影時,我得到的數據不能轉換爲String錯誤。我將使用Cursor loader將blob數據加載到圖像中,就像讀取其他列中的文本一樣。 – Vince

回答

0

我有另一列,BorrowMeTable.COLUMN_IMAGE我想 加載到我的ImageView(R.id.pic_of_image)。我無法將其添加到我的 投影中,因爲它無法轉換爲字符串。

你爲什麼這麼認爲?

如果您將圖像作爲BLOB數據存儲在您的數據庫中,那麼您可以在查詢投影中使用列名稱並使用Cursor.getBlob(int)方法獲取光標後,勇敢地從數據庫檢索它們。

由於BitmapFactorydecodeByteArray(byte[], int, int)方法允許將字節數組直接解碼爲位圖,所以你也不需要輸入得到的字節數組到任何字節流來解碼成位圖。

您應該關心的唯一一件事是內存消耗,當您將原始字節數組解碼爲位圖時,它會發揮作用。 要正確使用位圖,請閱讀this課程以獲得更好的解釋。