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

use*_*951 1 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();
Run Code Online (Sandbox Code Playgroud)

谢谢

luc*_*mon 5

一点点"迟到",但我最近遇到了类似于这个问题的问题,其他有同样问题的人可能会找到你的问题,所以最好有一个答案.

首先,确保在调用getDrawingCache方法时获得所需的图像.如果您没有获得图像,请查看此帖子以了解可能的原因.

其次,确保图像不被回收.这可能不是这种情况,因为IllegalStateException,如果你不能包裹一个可回收的位图,就会抛出,你的应用程序就会崩溃.如果您的图像确实被回收,只需复制它并将副本放入Bundle.作为附注,呼叫setDrawingCacheEnabled(false)将呼叫recycle().

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

如果以上所有内容都顺利进行,并且导致这种情况发生在上面的代码中,则不应该只显示黑屏.如果你仍然得到一个黑屏,那么很可能是bug在Update活动中,而不是在发送图像的那个.

编辑:误读了这个问题.

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

i.putExtra("data",b.copy(b.getConfig(), b);
Run Code Online (Sandbox Code Playgroud)

这个问题让我意识到了这一点.