2012-05-23 2 views
0

Я пытаюсь показать изображение, сохраненное как blob в моей БД. Я использую ORMLite и Android 1.6. Я создал TextView, которые показывают «html.FromHtml»store and view image 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 байты в раздел HTML src="...". Это не сработает ни AFAIK.

+0

Хм. Хорошо, я изменился. Но «bitmap.getHeight» по-прежнему возвращает NPE. Если я прокомментирую его, на дисплее появится байт-код. – Munir

+0

@Munir Можете ли вы отладить свою программу и убедиться, что вы получите тот же 'byte []' из этого процесса, который вы ввели? Я подозреваю, что это не так. – Gray

+0

Метод 'getDrawable (String source)' обрабатывает содержимое 'src' в моем теге' '. Если я пройду путь от него и создаю растровое изображение с этого пути, я получил изображение на дисплее (я сделал этот тест). Поэтому я полагаю, что 'byte []' из 'src' внутри операции одинакова для' source' 'getDrawable (String source)'. Извините за английский. – Munir