我正在尝试在我的数据库中显示保存为blob的图像。我正在使用ORMLite和Android 1.6。 我创建了一个显示'html.FromHtml'
的textView以下是代码:
//Save the image in DB.
...
Bitmap myBitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().toString()+"/images/imagem.png");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
myBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
glossary.setImageBytes(byteArray);
'词汇表'是词汇表的一个实例。谁拥有'imageBytes'字段:
@DatabaseField(dataType = DataType.BYTE_ARRAY)
private byte[] imageBytes;
在我的活动中,我将此'imageBytes'传递给字符串以使用'html.FromHtml':
//Activity
...
String htmlContent = "<h1> Title </h1>
<img src=\""+glossary.getImageBytes.toString()+"\" />"
现在在我的适配器中,我尝试显示'htmlContent'的内容:
//Adapter
...
holder.tvContent.setText(Html.fromHtml(htmlContent, new Html.ImageGetter() {
@Override
public Drawable getDrawable(String source) {
byte[] data;
data = source.getBytes();
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
//Log.i("bitmap", "bitmap height:" + String.valueOf(bitmap.getHeight) );
//THIS LOG RETURN NPE
Drawable d = null;
d = new BitmapDrawable(getResources(),bitmap);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
return d;
}
}, null));
...
我认为问题是当我将字节更改为字符串并将字符串更改为字节时。因为'BitmapFactory.decodeFile()'创建的位图正在返回NPE。
但我不知道如何解决这个问题。
有什么建议吗? THX!
答案 0 :(得分:0)
当然,你的第一个问题是你不应该这样做:
glossary.getImageBytes().toString()
要将byte[]
变成String
,您应该这样做:
new String(glossary.getImageBytes())
如果您执行byte[].toString()
,则会将其设置为:
[B@3487a5cc
而不是由数组中的字节组成的String
。
也就是说,我不确定您是否可以将PNG
文件中的字节放入byte[]
数组,以打印为String
。这听起来像是要在HTML中打印二进制信息,我认为这些信息无法正确转换。此外,您似乎将PNG
字节放入src="..."
HTML部分。这对AFAIK都不起作用。