java.lang.RuntimeException: Parcelable встретил IOException, пишущий сериализуемый - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть arraylist, который я хочу отправить от 1 действия к другому, я использую сериализуемый, но в итоге получаю следующее сообщение об ошибке.

java.lang.RuntimeException: Parcelable обнаружена IOExceptionнаписание сериализуемого объекта (name = com.app ...)

Я также рассмотрел некоторые вопросы относительно этого на SO, большинство из них сказали, что все классы, определенные внутри вашего Serialized класс также должен реализовывать Serializable, но здесь Path, 'RectF', Matrix, это не мои классы, это классы Android, и я не могу реализовать Serializable в этих классах.

Вот так я отправляю список массивов из одного занятия в другое.

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 Ответ

0 голосов
/ 24 ноября 2018

здесь Path, 'RectF', Matrix, это не мои классы, это классы Android, и я не могу реализовать Serializable в этих классах ..

Тогда не имеютполя для них в Serializable классах.

Либо:

  • Не выполняйте здесь отдельные действия, но вместо этого сделайте что-нибудь другое (например, одно действие и два фрагмента)это устраняет необходимость в Intent или

  • Не передавать эти данные между действиями, а вместо этого использовать другую архитектуру приложения (например, данные не удерживаются ни одним действием, но вместо этого поддерживается хранилищем, с которым могут общаться оба действия), или

  • Создайте некоторую структуру данных, которую вы можете сделать Parceable или Serializable, из которой вы можете восстановитьобъекты вашей модели со своими желаемыми классами и передают эту структуру данных Parcelable / Serializable в Intent вместо TData

...