我正在尝试将一个存储为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);
正如我在我的计划的另一部分所做的那样。任何人都可以帮我解决这个问题吗?
谢谢!
答案 0 :(得分:0)
我想要另一个专栏,BorrowMeTable.COLUMN_IMAGE 加载到我的imageView(R.id.pic_of_image)。我不能把它添加到我的 投影,因为它无法转换为字符串。
你为什么这么认为?
如果您将图像作为BLOB数据存储在数据库中,那么您可以使用查询投影中的列名称从数据库中勇敢地检索它们,并在获得光标后使用Cursor.getBlob(int)
方法获取它们。
您也不需要将任何字节数组输入任何字节流以将其解码为位图,因为BitmapFactory
具有decodeByteArray(byte[], int, int)
方法,该方法允许直接将字节数组解码为位图。 / p>
您应该关注的唯一一件事是当您将原始字节数组解码为位图时的内存消耗。 要正确使用位图,请阅读this课程以获得更好的解释。