2012-06-30 3 views
0

Я работаю над приложением, где я получаю изображение с веб-сервера.BitmapFactory возвращает null

Мне нужно сохранить это изображение в базе данных sqlite. Возможно, он будет сохранен в byte[]; Я сделал этот путь, взяв тип данных как blob, а затем извлекая изображение из db и показывая при просмотре изображения.

я застрял где-то, однако: я получаю null когда я decodefrom ByteArray

код, который я использовал это:

InputStream is = null; 
try { 
    URL url = null;        
    url = new URL(http://....); 
    URLConnection ucon = null; 
    ucon = url.openConnection();  
    is = ucon.getInputStream(); 
} catch (MalformedURLException e1) {          
    e1.printStackTrace(); 
} catch (IOException e1) {         
    e1.printStackTrace(); 
} 

BufferedInputStream bis = new BufferedInputStream(is); 
ByteArrayBuffer barb = new ByteArrayBuffer(128); 
int current = 0; 
try { 
    while ((current = bis.read()) != -1) { 
    barb.append((byte) current); 
} catch (IOException e) {         
    e.printStackTrace(); 
} 

byte[] imageData = barb.toByteArray(); 

Затем я вставил ImageData в к БД ..

Для получения изображения:

byte[] logo = c.getBlob(c.getColumnIndex("Logo_Image")); 
Bitmap bitmap = BitmapFactory.decodeByteArray(logo, 0, logo.length); 
img.setImageBitmap(bitmap); 

Но я я получаю сообщение об ошибке:

Bitmap bitmap is getting null.

+0

Байт [] содержит любые данные после c.getBlob()? – sandrstar

+0

@sandstar: да байт [] логотип содержит данные типа- [35,86,56,85,13,78]. – dave21

+0

ByteArrayBuffer больше не доступен в Java, поэтому часть этого решения устарела, поэтому я пытаюсь https://stackoverflow.com/questions/32138739/bytearraybuffer-missing-in-sdk23 – FalconBot

ответ

0

Иногда, когда ваш байт [] неправильно декодируется после извлечения из базы данных типа blob.

Таким образом, можно сделать как этот путь, Encode - Decode,

закодировать изображение перед записью в базу данных:

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
mBitmap.compress(Bitmap.CompressFormat.JPEG, THUMB_QUALITY, outputStream); 
mByteArray = outputStream.toByteArray(); // write this to database as blob 

А затем декодировать его как и от курсора:

ByteArrayInputStream inputStream = new ByteArrayInputStream(cursor.getBlob(columnIndex)); 
Bitmap mBitmap = BitmapFactory.decodeStream(inputStream); 

Кроме того, если это не работает в вашем случае, я предлагаю вам пойти по приемлемым причинам.

  • Создайте каталог на внешнем/внутреннем хранилище для вашего приложения изображений.
  • Теперь храните изображения в этом каталоге.
  • И сохраните путь к файлам изображений в вашей базе данных. Таким образом, у вас нет проблем при кодировании-декодировании изображений.
Смежные вопросы