2013-05-30 3 views
0

Я пытаюсь получить изображение, сохраненное как данные BLOB в базе данных SQLite, в Imageview, используемое в строке для активности списка.BLOB Image from databasetable to Listview

Это мой код для двух методов я использую, чтобы тянуть регулярные текстовые данные:

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

Какая у вас ошибка? и поместите логарифм, чтобы мы могли вам помочь. – Riser

+0

@Segi Я действительно спрашиваю, как изменить свою fillData для размещения моих изображений. Когда я пытаюсь добавить столбец, хранящий мои данные BLOB в проекции, я получаю данные, не конвертируемые в String error. Я бы использовал свой загрузчик курсора для загрузки данных blob в изображение так же, как он читает текст в других столбцах. – Vince

ответ

0

У меня есть еще один столбец, BorrowMeTable.COLUMN_IMAGE, что я хотел бы груз в моей ImageView (R.id.pic_of_image). Я не могу добавить его в мою проекцию , так как она не может быть преобразована в строку.

Почему вы так думаете?

Если вы храните изображения в своей базе данных в виде данных BLOB, вы можете смело извлекать их из БД, используя их имя столбца в проекции запроса, и после получения курсора их получить с помощью метода Cursor.getBlob(int).

Вам также не нужно вводить полученный массив байтов в любой поток байтов, чтобы декодировать его в растровое изображение, потому что BitmapFactory имеет метод decodeByteArray(byte[], int, int), который позволяет декодировать массив байтов непосредственно для растрового изображения.

Единственное, что вам нужно позаботиться, это потребление памяти, которое действует, когда вы декодируете ваши необработанные байтовые массивы в растровые изображения. Чтобы правильно работать с растровыми изображениями, прочитайте this уроки для лучшего объяснения.