При тестировании своего приложения на телефоне у меня возникла ошибка нехватки памяти, и после некоторых исследований я обнаружил, что это связано с неправильным использованием растровых изображений. Изначально я бы объявил растровое изображение таким:
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 ответа
Вот документ для inJustDecodeBounds: http://developer.android. ru / reference / android / graphics / BitmapFactory.Options.html # inJustDecodeBounds
Вот текст, выделенный мной:
Если установлено значение true, декодер вернет null (без растрового изображения) , но поля out ... будут по-прежнему установлены, позволяя вызывающей стороне запрашивать растровое изображение без необходимости выделять память для его пикселей.
Как видите, вы устанавливаете параметр, который гарантирует, что вы получите нулевое растровое изображение!
Для переменной background задано значение null . Возможно, он не загружается. Сначала исправьте это, чтобы он указывал на объект Bitmap, а затем вы сможете его нарисовать.
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.