android - java.lang.IllegalStateException : Can't parcel a recycled bitmap error occurs

标签 android

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

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

我想将此位图发送到另一个 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();

谢谢

最佳答案

“晚了一点”,但我最近遇到了与此类似的问题,并且其他有相同问题的人可能会找到您的问题,因此最好有答案。

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

其次,确保图像不会被回收。情况可能并非如此,因为会抛出一个 IllegalStateException,表示您无法打包回收的位图,并且您的应用程序将会崩溃。如果您的图像确实被回收,只需复制它并将其放入 Bundle 中。附带说明一下,调用 setDrawingCacheEnabled(false) 将调用 recycle()

第三(也是最后),确保图像到达其他 Activity 。反序列化错误字段或错误变量等错误非常常见。

如果上述一切顺利,并且发生这种情况的原因在上面的代码中,那么您不应该只显示黑屏。如果您仍然遇到黑屏,则错误很可能出现在 Update Activity 中,而不是发送图像的 Activity 中。

编辑:误读了问题。

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

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

This question帮助我认识到了这一点。

关于android - java.lang.IllegalStateException : Can't parcel a recycled bitmap error occurs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13737485/

相关文章:

java - 如何在 execSQL() 中使用变量?

java - 使用联系人电话号码打开联系人列表中的联系人信息 Android Studio

android - 每次单击 Button 时 TextView 中的时间都不会更新....有什么问题?

Android 服务和 SQLite 访问数据完整性

android - Android Room 中的实体列表关系

android - 当我的 friend 下载我的应用程序时,我的应用程序没有 Logo

android - 定期画线

java - 如何创建算法来在 RecyclerView 中设置多重检查项目

android - 如何在 Google map 上绘制静态目标圆圈?

android - 对较低 API 的样式和主题支持