Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓拯救困境&x27;正在使用序列化,这是错误的_Java_Android_Serialization - Fatal编程技术网

Java 安卓拯救困境&x27;正在使用序列化,这是错误的

Java 安卓拯救困境&x27;正在使用序列化,这是错误的,java,android,serialization,Java,Android,Serialization,我有一个类,Savable,可以序列化整个类。很快,很容易,很好。不幸的是,如果我想更新我的应用程序,这是一个问题。当从旧版本反序列化实例时,如果对savable或其子代进行任何更改,则会引发虚拟错误、and或抽象错误以及其他错误 在阅读Android的“保存数据”页面时,开发人员应该使用下面列出的方法之一。在构建报警应用程序时,我选择了SQLLite选项 问题是,到目前为止,我的应用程序是在考虑我的可保存类的情况下创建的。切换到数据库将需要对我的Alarm类进行完全修改,因为Alarm中还有其

我有一个类,Savable,可以序列化整个类。很快,很容易,很好。不幸的是,如果我想更新我的应用程序,这是一个问题。当从旧版本反序列化实例时,如果对savable或其子代进行任何更改,则会引发虚拟错误、and或抽象错误以及其他错误

在阅读Android的“保存数据”页面时,开发人员应该使用下面列出的方法之一。在构建报警应用程序时,我选择了SQLLite选项

问题是,到目前为止,我的应用程序是在考虑我的可保存类的情况下创建的。切换到数据库将需要对我的Alarm类进行完全修改,因为Alarm中还有其他可保存类的后代。因此,为了保存每个报警,我需要为每个可保存的子类创建一个数据库

目前,我有一个方法Saveable.save(上下文上下文),它序列化要填充的对象。这需要重写,因为现在我不需要序列化整个Alarm类,而是需要将核心Alarm内容保存到Alarm.db中,Saveable的子类保存到subclass.db中

这就提出了另一个关于加载的问题。我有一个方法Saveable.LOAD(File path),它反序列化一个可保存对象,可以将其转换为原始类。现在,由于Alarm类包含其他需要保存在单独DBs中的可保存对象,Alarm类将需要对Alarm中每个子可保存类的引用


不用说,这很快就会变得非常混乱。我并不反对这项工作(编程很神奇),但在我再次改变自己之前,这是你解决这个问题的方法吗?

我是一个新的程序员,但是,您不能通过进入命令行并输入say:serialver class name,然后输出静态的最终longerialversinuid,来获取用于更新的序列化代码,从而允许对象/类与更新的版本一起使用吗。然后在要序列化的类中生成一个静态的最终长serialVersionUID=(插入命令行在此处给出的随机长数),然后与程序的更新版本一起使用。您可能已经知道这一点,并且可能不是您要寻找的答案,但我是新手,这是我听说的序列化类、更新源代码、然后反序列化类并将其与更新的代码一起使用的唯一方法。

我建议您放弃整个方法。你到底想做什么?序列化类是一个解决方案,问题是什么?因为以任何格式序列化类都会遇到这样的问题,这就是为什么它通常不是一个好主意的原因。这似乎是一种很好的快速保存方式,但最终它几乎总是会咬到你。@Gabeschen我正在尝试将我的类更新为一种正确的保存方式,这样每次更新时,我就不必删除此人的保存数据和/或冒着崩溃的风险,因为我修改了一个可序列化的类。