Android空指针未绘制位图图像

Android空指针未绘制位图图像,android,nullpointerexception,bitmapfactory,Android,Nullpointerexception,Bitmapfactory,我遇到了一个我在这里似乎无法解决的问题!我正在开发一款简单的android游戏,几乎实现了所有功能,但后来决定在其中添加一些障碍(该游戏是一款月球登陆者风格的游戏) 基本上,我已经创建了一个小行星类,我只是想把它们画在屏幕上。加载游戏时,会绘制小行星,一切正常,但如果您按下主页按钮或关闭电源,然后重新启动游戏,我会得到一个NPE: 03-04 21:33:21.243: E/AndroidRuntime(10748): FATAL EXCEPTION: Thread-680 03-04 21:3

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

基本上,我已经创建了一个小行星类,我只是想把它们画在屏幕上。加载游戏时,会绘制小行星,一切正常,但如果您按下主页按钮或关闭电源,然后重新启动游戏,我会得到一个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对象/图像为null,但在此之前,我检查画布是否为null。在位图中,我检查图像是否不为空:

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

return asteroidImage;
}

有什么想法吗?

您可能超出了内存预算,这就是您在尝试使用时得到空值的原因

开发者网站有如何避免这种情况

要使用的一个重要选项(再次查看第二个链接以了解如何使用它的示例)是“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,但设置 外部宽度、外部高度和外部类型。这项技术可以让你阅读 施工前图像数据的尺寸和类型(以及 内存分配)的位图


我忘了从包中重新加载一些所需的变量,包括图像


谢谢你的帮助

如果decodeResource返回null(出错时将返回null),则getBitmap函数返回null。检查这种可能性。我肯定会得到
java.lang.OutofMemoryError:位图大小超过VM预算。
错误?遗憾的是,没有。请阅读文档(此处:,int))。您得到的(如果您在logcat中查找)是错误消息。但是,您不会得到可捕获的异常。