java.lang.RuntimeException: Parcelable 遇到 IOException 写入可序列化

Posted

技术标签:

【中文标题】java.lang.RuntimeException: Parcelable 遇到 IOException 写入可序列化【英文标题】:java.lang.RuntimeException: Parcelable encountered IOException writing serializable 【发布时间】:2019-04-26 20:05:12 【问题描述】:

我有一个arraylist,我想从一个活动发送到另一个活动,我正在使用可序列化但最终收到以下错误消息。

java.lang.RuntimeException: Parcelable 遇到 IOException 编写可序列化对象(name = com.app...)

我还在SO 上查看了一些关于此的问题,其中大多数人说在Serialized 类中定义的所有类也应该实现Serializable,但这里Path,'RectF', Matrix,不是我的类,它们是 android 类,我无法在这些类中实现 Serializable

这就是我将数组列表从 1 个活动发送到另一个活动的方式。

Intent intent= new Intent(MainActivity.this, DetailsActivity.class);
        Bundle bundle= new Bundle();
        bundle.putSerializable("PATH_LIST", pathsList);
        bundle.putString("FILE_NAME", fileName);
        intent.putExtras(bundle);
        startActivity(intent);

这是我的课。

public class TData implements Serializable 

    Matrix originalMatrix;
    public Path path;
    PointF position;



    private TData attachedPathData;
    public void setAttachedPathData(TData pathData)
        attachedPathData = pathData;
    
    public TData getAttachedPathData()
        return attachedPathData;
    


    public TData()

    


    public TData(Path path, PointF position, String id, String fillColor, String strokeColor)
        this.path = path;
        this.position = position;
        this.id = id;

        this.fillColor = fillColor;
        this.strokeColor = strokeColor;
    

    public void Scale(float scaleX, float scaleY)
        this.scaleX = scaleX;
        this.scaleY = scaleY;

        Matrix scaleMatrix = new Matrix();
        RectF rectF = new RectF();
        path.computeBounds(rectF, true);
        scaleMatrix.setScale(scaleX,scaleY);
        path.transform(scaleMatrix);


        Matrix mat = new Matrix();
        path.computeBounds(rf, true);

        Region r = new Region();

    

【问题讨论】:

以后,请发布整个堆栈跟踪,而不仅仅是错误消息。 【参考方案1】:

这里的 Path、'RectF'、Matrix,不是我的类,它们是 android 类,我无法在这些类中实现 Serializable..

那么在Serializable 类中没有它们的字段。

要么:

这里没有单独的活动,而是做其他事情(例如,一个活动和两个片段),以避免需要Intent,或者

不要在活动之间传递此数据,而是使用不同的应用程序架构(例如,数据不由任一活动持有,而是由两个活动可以与之通信的存储库持有),或

创建一些可以创建ParceableSerializable 的数据结构,从中可以使用所需的类重建模型对象,并将Parcelable/Serializable 数据结构传递到@ 987654327@ 而不是 TData

【讨论】:

以上是关于java.lang.RuntimeException: Parcelable 遇到 IOException 写入可序列化的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 按钮导致崩溃

添加 ImageView 时应用程序崩溃?