При тестировании своего приложения на телефоне у меня возникла ошибка нехватки памяти, и после некоторых исследований я обнаружил, что это связано с неправильным использованием растровых изображений. Изначально я бы объявил растровое изображение таким:

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

Это первый случай использования растрового изображения, и он также случается для каждого другого использования.

1
user2387830 28 Янв 2015 в 02:37

2 ответа

Лучший ответ

Вот документ для inJustDecodeBounds: http://developer.android. ru / reference / android / graphics / BitmapFactory.Options.html # inJustDecodeBounds

Вот текст, выделенный мной:

Если установлено значение true, декодер вернет null (без растрового изображения) , но поля out ... будут по-прежнему установлены, позволяя вызывающей стороне запрашивать растровое изображение без необходимости выделять память для его пикселей.

Как видите, вы устанавливаете параметр, который гарантирует, что вы получите нулевое растровое изображение!

0
iheanyi 28 Янв 2015 в 00:03

Для переменной background задано значение null . Возможно, он не загружается. Сначала исправьте это, чтобы он указывал на объект Bitmap, а затем вы сможете его нарисовать.

0
gknicker 28 Янв 2015 в 00:04