Drawable.createFromResourceStream()中的异常——仅限HTC



我已经发布了一个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的子类InputMethodServicestream要么是FileInputStreamAssetInputStream(我都尝试过)。资源文件是编译的NinePatchDrawable。我已经确认流不为空。

重复:此错误仅发生在某些HTC手机(包括Evo)运行不同版本的Android操作系统。

有人经历过这个和/或知道如何修复它吗?

提前感谢,

巴里

注:奇怪的是,崩溃行465不在崩溃方法BitmapFactory.decodeResourceStream()在任何版本的BitmapFactory.java中,所以HTC必须使用修改过的代码

找到这个问题的解决方案,您可以将对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);
}

这只适用于文件。

可以直接用Drawable.createFromStream ()代替Drawable.createFromResourceStream()

您是否尝试过为Drawable.createFromResourceStream提供全套有效参数?我看过Android代码,你安全地传递一个虚拟TypedValue和一个虚拟Options对象,仍然保持默认行为。

:

    Options opts = new BitmapFactory.Options();
    TypedValue dummy = new TypedValue(); 
    Drawable d = Drawable.createFromResourceStream( mContext.getResources(), dummy, in, assetPath, opts);

谁能在HTC设备上验证这一点?

相关内容

  • 没有找到相关文章

最新更新