2013-05-30 146 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课程以获得更好的解释。