【问题标题】:nullPointer Exception on Asset manager资产管理器上的 nullPointer 异常
【发布时间】:2014-09-18 12:05:40
【问题描述】:

我的班级活动中有这个功能:

private Bitmap getBitmapFromAsset(String strName) {
    AssetManager assetManager =this.getAssets();
    InputStream istr = null;
    try {
        istr = assetManager.open(strName);
    } catch (IOException e) {
        e.printStackTrace();
    }
    Bitmap bitmap = BitmapFactory.decodeStream(istr);
    return bitmap;
}

这个函数在公共类 Game1 中扩展了 Activity

但我得到空指针异常:

AssetManager assetManager = this.getAssets();
Caused by: java.lang.NullPointerException at packagename.Game1.getBitmapFromAsset

我该怎么办?

【问题讨论】:

  • 可能是 this 为空。你在哪个文件中保存了这个方法?
  • 请发布整个堆栈跟踪,并指出您在代码中的哪个位置调用getBitmapFromAsset()
  • 我使用了 context 或 getbaseContext() 而不是这个,但它不起作用:(
  • 请按照 CommonsWare 的建议发布堆栈跟踪。
  • 这个方法getBitmapFromAsset()在非活动类吗??

标签: android asset-management


【解决方案1】:

您需要在活动创建后调用getBitmapFromAsset()。 如果您在活动创建之前调用它,那么它将提供NullPointerException

然后是代码-

AssetManager assetManager = this.getAssets();

这里是this = getActivity(),因此为空。

【讨论】:

    【解决方案2】:

    首先创建如下上下文,

    Context mTestAppContext = getContext().createPackageContext("com.project.test",
                    Context.CONTEXT_IGNORE_SECURITY);
    

    在这里,使用您的包名而不是“com.project.test”。并使用上面的上下文而不是如下所示的“this”,

    AssetManager assetManager = mTestAppContext.getAssets();
    

    希望以上内容能有所帮助。

    【讨论】:

    • 如果我们写 getApplicationContext() 而不是 getContext() 会怎样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2020-06-07
    • 2017-09-09
    相关资源
    最近更新 更多