BitmapFactory返回null

时间:2012-06-30 10:14:48

标签: android sqlite bitmap

我正在开发一个应用程序,我从Web服务器获取图像。

我需要将该图像保存在sqlite数据库中。也许它会保存在byte[];我这样做了,将数据类型设为blob,然后从db中检索图像并在imageview中显示。

我被困在某处,但是当我从bytearray解码时,我得到null

我使用的代码是:

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插入到db ..

要检索图像:

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

但我收到错误:

  

位图位图变为空。

1 个答案:

答案 0 :(得分:0)

有时候,当你从数据库中检索blob类型后你的byte []没有正确解码时会发生这种情况。

所以,你可以这样做,编码 - 解码

在写入数据库之前对图像进行编码:

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

然后解码它就像来自Cursor:

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

另外,如果这不适用于你的情况,那么我建议你继续以可行的方式......

  • 在您的应用程序的外部/内部存储上创建一个目录 图像。
  • 现在将图像存储在该目录中。
  • 并将这些图像文件的路径存储在数据库中。那么你 对图像的编码解码没有问题。