2012-05-23 92 views
0

我想显示一个图像作为blob保存在我的数据库中。我正在使用ORMLite和Android 1.6。 我创建了一个TextView谁表现出“html.FromHtml”存储和查看图像blob html.fromhtml android

下面是代码:

//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

那么肯定你的第一个问题是,你不应该这样做:

glossary.getImageBytes().toString() 

要打开一个byte[]String你应该做的:

new String(glossary.getImageBytes()) 

如果你做一个byte[].toString()这将是设置类似于:

[[email protected] 

Inste由数组中的字节组成的String的广告。

也就是说,我不确定您只能将PNG文件中的字节放入byte[]阵列中作为String打印出来。这听起来像你打算在你的HTML打印二进制信息,我不认为会正确转换。另外,它看起来像是将PNG字节放入src="..."HTML部分。这也不适用于AFAIK。

+0

嗯。好的,我改变了。但'bitmap.getHeight'仍然返回一个NPE。如果我评论他,显示器会显示一个字节码。 – Munir

+0

@Munir你可以调试你的程序,并确保你从你输入的进程中获得相同的'byte []'?我怀疑你不是。 – Gray

+0

'getDrawable(String source)'方法在我的标签''中处理'src'的内容。如果我通过一条路径并从这条路径创建一个位图,我就得到了显示的图像(我做了这个测试)。所以我想'src'的'byte []'里面的活动和'getDrawable(String source)'的'source'是一样的。对不起英文。 – Munir