Исключение в Drawable.createFromResourceStream () - ТОЛЬКО для HTC? - PullRequest
3 голосов
/ 13 октября 2011

Я выпустил приложение IME (программная клавиатура) и получаю отчеты о сбоях только с телефонов HTC .Вот трассировка стека:

java.lang.NullPointerException
    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:465)
    at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
    at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:666)
    at com.comet.android.keyboard.util.Util.getBitmapDrawable(MyFile.java:416)
    ...

Вот мой вызов Drawable.createFromResourceStream ()

drawable = Drawable.createFromResourceStream(context.getResources(), null, stream, null);

, где context подкласс InputMethodService и stream это либо FileInputStream , либо AssetInputStream (я пробовал оба).Файл ресурса представляет собой скомпилированный NinePatchDrawable .Я подтвердил, что поток не является нулевым.

Повторим: эта ошибка возникает только с некоторыми телефонами HTC (включая Evo), работающими под различными версиями ОС Android.

Кто-нибудь испытывал это и / или знает, как это исправить?

Заранее спасибо,

Барри

PS Что странно, что линия крушения 465 не находится в пределах крушенияМетод BitmapFactory.decodeResourceStream () в любой версии BitmapFactory.java , поэтому HTC должна использовать измененный код.

Ответы [ 3 ]

4 голосов
/ 08 февраля 2012

Найдя решение этой проблемы, вы можете заменить вызов Drawable.createFromResourceStream на:

// set options to resize the image
Options opts = new BitmapFactory.Options();
opts.inDensity = 160;

Drawable drawable  = null;
Bitmap bm = BitmapFactory.decodeFile(file.getAbsolutePath(), opts);
if (bm != null) {
  drawable = new BitmapDrawable(context.getResources(), bm);
}

Это работает только с файлами.

1 голос
/ 12 января 2012

Вы можете просто использовать Drawable.createFromStream () вместо Drawable.createFromResourceStream()

0 голосов
/ 14 октября 2013

Вы пытались предоставить Drawable.createFromResourceStream полный набор действительных параметров?Я посмотрел на код Android, и вы безопасно передаете и фиктивные TypedValue и фиктивные Options объекты и по-прежнему сохраняете поведение по умолчанию.Кто-нибудь может проверить это на устройстве HTC?

...