【问题标题】:Android null pointer onDraw Bitmap image [closed]Android空指针onDraw位图图像[关闭]
【发布时间】:2013-03-04 21:38:46
【问题描述】:

我遇到了一个我似乎无法在这里解决的问题!我正在开发一个简单的 android 游戏,并且几乎实现了所有内容,但后来决定在其中添加一些障碍(该游戏是月球着陆器风格的游戏)。

基本上,我已经创建了一个 Asteroid 类,我只是想在屏幕上绘制它们。加载游戏时,小行星被绘制,一切正常,但如果你按下主页按钮或关闭电源然后重新启动游戏,我会得到一个 NPE:

03-04 21:33:21.243: E/AndroidRuntime(10748): FATAL EXCEPTION: Thread-680
03-04 21:33:21.243: E/AndroidRuntime(10748): java.lang.NullPointerException
03-04 21:33:21.243: E/AndroidRuntime(10748):    at com.swiss196.LunarLander.GameThread.doDraw(GameThread.java:421)
03-04 21:33:21.243: E/AndroidRuntime(10748):    at com.swiss196.LunarLander.GameThread.run(GameThread.java:386)

它指向以下代码:

canvas.drawBitmap(test2.getBitmap(), 120, 120, null);

这表明 getBitmap 返回的画布或 test2 对象/图像为空,但在此之前,我检查画布是否不为空。在位图中,我检查图像也不为空:

public Bitmap getBitmap() {
if(asteroidImage == null)
    asteroidImage = BitmapFactory.decodeResource(mGameView.getContext().getResources(),
                                                 R.drawable.asteroid);

return asteroidImage;
}

有什么想法吗?

【问题讨论】:

  • 如果 decodeResource 返回 null(它会出错)getBitmap 函数返回 null。检查这种可能性。

标签: android nullpointerexception bitmapfactory


【解决方案1】:

我忘记从包中重新加载一些需要的变量,包括图像..

感谢您的帮助!

【讨论】:

    【解决方案2】:

    您可能超出了内存预算,这就是您尝试decode your Bitmap 时得到空值的原因。

    开发者网站有pretty good descriptions如何避免这种情况。

    使用的一个重要选项(再次查看第二个链接以了解如何使用它的示例)是“BitmapFactory.Options”,它允许您验证您的位图是否有足够的内存:

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeResource(getResources(), R.id.myimage, options);
    int imageHeight = options.outHeight;
    int imageWidth = options.outWidth;
    

    引用文档

    在解码时将 inJustDecodeBounds 属性设置为 true 可避免 内存分配,位图对象返回 null 但设置 outWidth、outHeight 和 outMimeType。这种技术可以让你阅读 构建之前图像数据的尺寸和类型(以及 位图的内存分配)。

    【讨论】:

    • 我肯定会收到java.lang.OutofMemoryError: bitmap size exceeds VM budget. 错误吗?
    • 很遗憾,没有。阅读文档(此处:developer.android.com/reference/android/graphics/…, int))。
    • 您得到的(如果您在 logcat 中查找)是错误消息。但是,您不会得到可捕获的异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多