我之前提到过这个问题,但我之前并不完全明白发生了什么。
我现在确切地知道发生了什么,我只需要知道为什么以及如何绕过它。 让我解释一下这个问题:
我正在开发一个需要重复绘制png资源到画布的android应用程序。到目前为止,这一直很好,我无法再添加任何资源。从技术上讲,我可以添加资源,但是当我尝试在运行时检索它们时,应用程序崩溃时出现空指针错误。 (详情如下)
以下是我如何在代码中实现资源的示例(为简单起见,缩小了大小):
// 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);
现在我只说明了两次,但在我的代码中,我实际需要做大约150次。但由于某种原因,第50个图像开始吐出空指针错误。图像平均大约8kb,但有一个或两个接近600kb。图像越大(似乎)在击中空指针错误之前我可以拥有的图像越少。这是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)