java.lang.RuntimeException: Parcelable 遇到IOException 写入serializable

java.lang.RuntimeException: Parcelable encountered IOException writing serializable

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

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.app...)

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

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

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);

这是我的class。

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();

    }
}

here Path, 'RectF', Matrix, are not my classes, they are android classes, and i can't implement Serializable in these classes..

然后在 Serializable 类 中没有它们的字段。

或者:

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

  • 不要在活动之间传递此数据,而是使用不同的应用程序架构(例如,数据不由任何 activity 保存,而是由存储库保存两个活动都可以对话),或者

  • 创建一些您可以制作 ParceableSerializable 的数据结构,从中您可以使用所需的 类 重建模型对象,然后将其传递Parcelable/Serializable 数据结构中的 Intent 而不是 TData