Я уже упоминал эту проблему раньше, но раньше я точно не понимал, что происходит.
Теперь я точно знаю, что происходит, мне просто нужно знать, почему и как это обойти.
Позвольте мне объяснить проблему:
Я разрабатываю приложение для Android, которое должно многократно рисовать ресурсы png на холсте. До сих пор это работало нормально, и я не могу добавить больше ресурсов. Технически я могу добавить ресурсы, но когда я пытаюсь получить их во время выполнения, приложение вылетает с ошибкой нулевого указателя. (Подробности ниже)
Вот пример того, как я реализую ресурсы в коде (для простоты уменьшен в размере):
// getting handles to the images
Drawable pic1;
Drawable pic2;
Resources res = context.getResources();
pic1 = context.getResources().getDrawable(R.drawable.picone);
pic2 = context.getResources().getDrawable(R.drawable.pictwo);
// drawing the images
pic1.setBounds(x,y, (x + 100), (y + 100));
pic1.draw(canvas);
pic2.setBounds(x,y, (x + 100), (y + 100));
pic2.draw(canvas);
Теперь я только иллюстрировал, как сделать это 2 раза, но в моем коде мне действительно нужно сделать это примерно 150 раз. Но по какой-то причине около 50-го изображения начинает выплевывать ошибка нулевого указателя. Изображения в среднем около 8 КБ, но есть один или два, которые приближаются к 600 КБ. чем больше изображения (кажется), тем меньше изображений я могу иметь, прежде чем нажать кнопку с нулевым указателем. Вот logcat:
08-20 07:27:12.569: ERROR/AndroidRuntime(4032): at com.example.android.lunarlander.LunarView$LunarThread.run(lunarview.java:400)
08-20 08:58:11.051: ERROR/AndroidRuntime(5329): FATAL EXCEPTION: Thread-10
08-20 08:58:11.051: ERROR/AndroidRuntime(5329): java.lang.NullPointerException
08-20 08:58:11.051: ERROR/AndroidRuntime(5329): at com.example.android.lunarlander.LunarView$LunarThread.draw(lunarview.java:1230)
08-20 08:58:11.051: ERROR/AndroidRuntime(5329): at com.example.android.lunarlander.background.draw(background.java:49)
08-20 08:58:11.051: ERROR/AndroidRuntime(5329): at com.example.android.lunarlander.LunarView$LunarThread.drawBackground(lunarview.java:645)
08-20 08:58:11.051: ERROR/AndroidRuntime(5329): at com.example.android.lunarlander.LunarView$LunarThread.runMainLoop(lunarview.java:662)
08-20 08:58:11.051: ERROR/AndroidRuntime(5329): at com.example.android.lunarlander.LunarView$LunarThread.run(lunarview.java:401)