Java 使用位图时出现NullPointerException

Java 使用位图时出现NullPointerException,java,android,bitmap,Java,Android,Bitmap,在手机上测试我的应用程序时,我遇到了内存不足的错误,经过一些研究,我发现这是由于我不恰当地使用位图造成的。最初,我会声明位图如下: Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.image_name); 从日志中,我看到错误源于此。因此,我四处阅读并尝试使用一个额外的参数,选项,例如: BitmapFactory.Options options = new BitmapFactory.Options

在手机上测试我的应用程序时,我遇到了内存不足的错误,经过一些研究,我发现这是由于我不恰当地使用位图造成的。最初,我会声明位图如下:

Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.image_name);
从日志中,我看到错误源于此。因此,我四处阅读并尝试使用一个额外的参数,选项,例如:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
然后声明位图

image = BitmapFactory.decodeResource(getResources(), R.drawable.image_name, options);
运行此操作时,我不再出现内存不足错误,但在尝试使用位图时,如果是尝试将位图绘制到画布上,或者对位图调用.getWidth()和.getHeight(),我会收到一个空指针异常

我很难解决这个问题,如果能提供一些反馈,我将不胜感激

错误日志:

01-27 18:47:42.597: E/AndroidRuntime(15698): java.lang.NullPointerException
01-27 18:47:42.597: E/AndroidRuntime(15698):    at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1083)
01-27 18:47:42.597: E/AndroidRuntime(15698):    at android.graphics.Canvas.drawBitmap(Canvas.java:1139)
01-27 18:47:42.597: E/AndroidRuntime(15698):    at com.mascal.petele.Game$OurView.drawMenu(Game.java:654)
01-27 18:47:42.597: E/AndroidRuntime(15698):    at com.mascal.petele.Looping.run(Looping.java:34)
在Game.java:654中,代码行是:

c.drawBitmap(background, 0, 0, null);

这是位图的第一次使用,也适用于其他使用。

以下是inJustDecodeBounds的文档:

以下是文本,突出我自己的内容:

如果设置为true,解码器将返回null(无位图),但输出。。。字段仍将被设置,允许调用方查询 位图,而无需为其像素分配内存


如您所见,您设置了一个选项,保证您将获得一个空位图

您的背景变量设置为空。也许它无法加载。首先修复该问题,使其指向位图对象,然后您就可以绘制它。

调试器从不说谎。请检查产生错误的行。确保
图像
未被
回收
并且
画布
已初始化。为了获得更好的答案,最好使用更多的代码或日志。您是否正在检查BitmapFactory.decodeResource返回的值?还要记住,Android中的进程可用内存有限,所以不要使用未压缩或太大的图像。什么是背景?这似乎是空指针。背景是位图的名称。我刚刚检查了导致nullpointerexception的位图的值,它实际上是空的。而且图像本身也不是太大,它们的最大容量是16kb。我原以为使用decodeResource可以解决占用太多内存的问题,但我猜我仍然没有正确地使用它。这就是inJustDecodeBounds的意思:如果设置为true,解码器将返回null(无位图),但out。。。字段仍将被设置,允许调用者查询位图,而不必为其像素分配内存。因此,这保证了位图为空。那么我想最初的问题仍然存在,因为我尝试的outofmemory错误解决方案不起作用。@user2387830您应该阅读以下内容:另外,如果您认为我的回答充分解决了此特定问题中的问题,请接受我的回答。