java.lang.IllegalStateException:无法包裹发生回收的位图错误

时间:2012-12-06 05:27:31

标签: android

我正在尝试使用以下代码来获取图像的位图,该位图取自相机。 我使用这个概念是因为我将图像作为水印添加到拍摄的照片中。所以我只是将活动绘制为位图。

当我这样做时,我收到以下错误(无法包裹发生回收的位图错误)

我想将此位图发送到另一个Activity。

如何检查我是否收到图像?

else if(v.equals(findViewById(R.id.ok_button))){


                topbar.setVisibility(View.GONE);
                menubar.setVisibility(View.GONE);
                bottom.setVisibility(View.GONE);

                View s = ml.getRootView();
                s.setDrawingCacheEnabled(true);

                b = s.getDrawingCache();
                Log.e("ok","ok");
                Intent i=new Intent(CameraActivity.this,Update.class);
                 i.putExtra("data",b);
                 startActivity(i);
      //           s.setDrawingCacheEnabled(false);
        //         s.setVisibility(View.GONE);
                 finish();

由于

1 个答案:

答案 0 :(得分:5)

“迟到”,但我最近遇到过与此类似的问题,其他有同样问题的人可能会找到你的问题,所以最好有答案。

首先,确保在调用getDrawingCache方法时获得所需的图像。如果您没有收到图片,请查看this post可能的原因。

其次,确保图像不会被回收。这可能不是这种情况,因为IllegalStateException表示您不能包裹回收的位图,将被抛出并且您的应用程序将崩溃。如果您的图片确实被回收,只需复制一份并将副本放入Bundle即可。作为旁注,致电setDrawingCacheEnabled(false)将致电recycle()

第三(和最后),确保图像通过其他活动。诸如反序列化错误字段或错误变量之类的错误非常常见。

如果上述所有情况都顺利,并且上述代码中出现了这种情况,则不应只显示黑屏。如果您仍然出现黑屏,那么该错误最有可能发生在Update活动中,而不是发送图像的错误。

编辑:误读了这个问题。

您可能会收到异常,因为在触发intent之后图像可能(无法确认)被序列化。如果是这种情况,只需将Bitmap的副本放在Intent上,而不是像Bitmap本身那样:

i.putExtra("data",b.copy(b.getConfig(), b);

This question让我意识到了这一点。