3

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);

ここで、 InputMethodServicecontextのサブクラスであり、 FileInputStreamまたはAssetInputStreamのいずれかです(両方を試しました)。リソース ファイルはコンパイル済みのNinePatchDrawableです。ストリームが null でないことを確認しました。stream

繰り返しますが、このバグは、さまざまなバージョンの Android OS を実行している特定の HTC ハンドセット(Evo を含む) でのみ発生します。

誰かがこれを経験したことがありますか、および/またはそれを修正する方法を知っていますか?

前もって感謝します、

バリー

PS奇妙なのは、クラッシュ行465がBitmapFactory.javaのどのバージョンのクラッシュメソッドBitmapFactory.decodeResourceStream ( )内にもないため、HTCは変更されたコードを使用している必要があることです。

4

3 に答える 3

4

この問題の解決策が見つかりました。呼び出しを次のように置き換えることができます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);
}

これはファイルでのみ機能します。

于 2012-02-08T14:45:52.973 に答える
1

Drawable.createFromStream ()代わりに使用できますDrawable.createFromResourceStream()

于 2012-01-12T08:28:42.183 に答える
0

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 デバイスでこれを確認できますか?

于 2013-10-14T15:08:34.923 に答える