我正在开发一个应用程序,我从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);
但我收到错误:
位图位图变为空。
答案 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);
另外,如果这不适用于你的情况,那么我建议你继续以可行的方式......