0

我正在尝试将在 SQLite 数据库中存储为 BLOB 数据的图像放入用于列表活动的行中的 Imageview 中。

这是我用来提取常规文本数据的两种方法的代码:

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

正如我在程序的另一部分所做的那样。谁能帮助我如何完成这项工作?

谢谢!

4

1 回答 1

0

我有另一列 BorrowMeTable.COLUMN_IMAGE 我想加载到我的 imageView (R.id.pic_of_image) 中。我无法将其添加到我的投影中,因为它无法转换为字符串。

你为什么这么认为?

如果您将图像作为 BLOB 数据存储在数据库中,那么您可以勇敢地使用查询投影中的列名从数据库中检索它们,并在获取游标后使用Cursor.getBlob(int)方法获取它们。

您也不需要将获取的字节数组输入到任何字节流以将其解码为位图,因为BitmapFactory具有decodeByteArray(byte[], int, int)允许直接将字节数组解码为位图的方法。

您应该关心的唯一一件事是当您将原始字节数组解码为位图时实际消耗的内存。要正确使用位图,请阅读课程以获得更好的解释。

于 2013-05-30T05:20:30.100 回答