在手机上测试我的应用程序时,我出现了内存不足错误,经过一些研究后发现,这是因为我对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);
这是第一次使用位图,也适用于其他用法。
答案 0 :(得分:0)
以下是inJustDecodeBounds的文档:http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inJustDecodeBounds
这是文字,突出了我自己的文字:
如果设置为true,解码器将返回null(无位图),但out ...字段仍将设置,允许调用者查询 位图,而不必为其像素分配内存。
如您所见,您设置了一个选项,可以保证您获得空位图!
答案 1 :(得分:0)
您的后台变量设置为 null 。也许它无法加载。首先修复它,因此它指向一个Bitmap对象,然后你就可以绘制它了。