0

我正在尝试在我的数据库中显示保存为 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。

但我不知道如何解决。

有什么建议么?谢谢!

4

1 回答 1

0

当然,您的第一个问题是您不应该这样做:

glossary.getImageBytes().toString()

要将 abyte[]变成 aString你应该这样做:

new String(glossary.getImageBytes())

如果你这样做byte[].toString(),它将被设置为:

[B@3487a5cc

而不是String由数组中的字节组成。

也就是说,我不确定您是否可以将PNG文件中的字节放入byte[]数组中以打印为String. 听起来您将在 HTML 中打印二进制信息,我认为这些信息不会正确转换。此外,看起来您正在将PNG字节放入src="..."HTML 部分。AFAIK 也行不通。

于 2012-05-23T18:02:36.987 回答