无法正确访问可绘制资源(png文件)?

时间:2011-08-20 13:10:18

标签: java android caching drawable

我之前提到过这个问题,但我之前并不完全明白发生了什么。

我现在确切地知道发生了什么,我只需要知道为什么以及如何绕过它。 让我解释一下这个问题:

我正在开发一个需要重复绘制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)

0 个答案:

没有答案