“如何修复”;java.io.InvalidClassException local class Compatible“不兼容”;错误?

“如何修复”;java.io.InvalidClassException local class Compatible“不兼容”;错误?,java,serialization,deserialization,Java,Serialization,Deserialization,我正在尝试做一个记事本应用程序,我正在跟踪,当我试图编译它时,它显示了这个错误 System.err: java.io.InvalidClassException: com.example.note.Note; local class incompatible: stream classdesc serialVersionUID = 2205386845645338430, local class serialVersionUID = -8697044096579308546 错误显示,在这个

我正在尝试做一个记事本应用程序,我正在跟踪,当我试图编译它时,它显示了这个错误

System.err: java.io.InvalidClassException: com.example.note.Note; local class incompatible: stream classdesc serialVersionUID = 2205386845645338430, local class serialVersionUID = -8697044096579308546
错误显示,在这个函数中,当您运行应用程序时,它将显示您在应用程序存在之前保存的注释

  public static ArrayList<Note> getAllSavedNotes(Context context) {
    ArrayList<Note> notes = new ArrayList<>();

    File filesDir = context.getFilesDir();
    ArrayList<String> noteFiles = new ArrayList<>();

    for(String file : filesDir.list()) {
        if(file.endsWith(FILE_EXTENSION)) {
            noteFiles.add(file);
        }
    }

    FileInputStream fis;
    ObjectInputStream ois;

    for (int i = 0; i < noteFiles.size(); i++) {
        try{
            fis = context.openFileInput(noteFiles.get(i));
            ois = new ObjectInputStream(fis);

            System.out.println(i);
            notes.add((Note) ois.readObject());
            fis.close();
            ois.close();

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        }
    }

    return notes;
}
publicstaticarraylistgetallsavednotes(上下文){
ArrayList notes=新的ArrayList();
File filesDir=context.getFilesDir();
ArrayList noteFiles=新的ArrayList();
对于(字符串文件:filesDir.list()){
if(file.endsWith(文件扩展名)){
添加(文件);
}
}
文件输入流fis;
目的输入流ois;
对于(int i=0;i

有人能帮我修复这个错误吗?

您需要让进行序列化的类使用与反序列化类相同的Notes版本。一个使用较旧的版本,另一个使用较新的版本。您能显示Notes类吗?您是否在其中定义了明确的serialVersionUID?@tentacle否我没有定义serialVersionUID,我只是按照教程添加serialVersionUID。序列化类和反序列化类应该是相同的。您提供的异常清楚地表明这就是问题所在。@attacle它显示了相同的错误