NullPointerException使用位图时

时间:2015-01-27 23:37:54

标签: java android bitmap

在手机上测试我的应用程序时,我出现了内存不足错误,经过一些研究后发现,这是因为我对Bitmaps的使用不当。最初,我会声明一个位图:

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

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

2 个答案:

答案 0 :(得分:0)

以下是inJustDecodeBounds的文档:http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inJustDecodeBounds

这是文字,突出了我自己的文字:

  

如果设置为true,解码器将返回null(无位图),但out ...字段仍将设置,允许调用者查询   位图,而不必为其像素分配内存。

如您所见,您设置了一个选项,可以保证您获得空位​​图!

答案 1 :(得分:0)

您的后台变量设置为 null 。也许它无法加载。首先修复它,因此它指向一个Bitmap对象,然后你就可以绘制它了。