Java 为什么我不能正确保存和加载这些序列化变量?
好的,我会尽量把这件事说清楚。我希望在我得到答案之前,它不会被标记 我正在尝试序列化一个类来保存它,它工作得很好。但有些变量没有正确加载。代码如下: 我还标出了代码起作用和不起作用的地方 编辑:简化代码多一点 类im保存:(它的简单版本)Java 为什么我不能正确保存和加载这些序列化变量?,java,android,serialization,fileinputstream,Java,Android,Serialization,Fileinputstream,好的,我会尽量把这件事说清楚。我希望在我得到答案之前,它不会被标记 我正在尝试序列化一个类来保存它,它工作得很好。但有些变量没有正确加载。代码如下: 我还标出了代码起作用和不起作用的地方 编辑:简化代码多一点 类im保存:(它的简单版本) 公共类classToSave实现了可序列化{ /** * */ 私有静态最终长serialVersionUID=-5184436214950145051L; public static List classtosavelist=new ArrayList()
公共类classToSave实现了可序列化{
/**
*
*/
私有静态最终长serialVersionUID=-5184436214950145051L;
public static List classtosavelist=new ArrayList();
publicstaticclasstosaveone=newotherclass1(“1”,1,1,null,Item.1,1);
publicstaticclasstosavetwo=新的OtherClass1(“2”,1,2,1,Item.2,1);
公共静态类保存三个=新的其他类2(“3”,1,4,2,第3,2项);
公共布尔值done=false;<不会加载/保存
public int lvl=0;<无法加载/保存
瞬态保护字符串名称;=needPoints()){
this.done=true;
}
归还这个。完成;
}
public int getLevel(){
返回此.lvl;
}
公共整数MAXLevel(){
返回1;
}
公共空间升级(){
if(this.lvl
以下是保存和加载的步骤:
private ClassToSave classtosave;
private void save(String savename) {
if (externalStorageWriteable) {
try {
File file = new File(ctxt.getExternalFilesDir(null), savename);
FileOutputStream fos = new FileOutputStream(file, false);
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(classtosave);
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void load(String savename) throws ClassNotFoundException, StreamCorruptedException, IOException {
if (externalStorageAvailable) {
File file = new File(ctxt.getExternalFilesDir(null), savename);
FileInputStream fis = new FileInputStream(file);
ObjectInputStream is = new ObjectInputStream(fis);
ClassToSave classtosave = (ClassToSave) is.readObject();
for (int i=0; i < classtosave.classtosavelist.size(); i++) {
classtosave.classtosavelist.get(i).Done(classtosave.classtosavelist.get(i).needPoints()); < WORKS
classtosave.classtosavelist.get(i).isCompleteDone(); < DOENST WORK
classtosave.classtosavelist.get(i).getLevel(); < DOESNT WORK
if (classtosave.classtosavelist.get(i).done == true){ <DOESNT WORK
classtosave.classtosavelist.get(i).done = true;
classtosave.classtosavelist.get(i).LevelUp();
}
}
}
is.close();
}
private ClassToSave ClassToSave;
私有void保存(字符串savename){
if(外部存储可写){
试一试{
File File=新文件(ctxt.getExternalFilesDir(null),savename);
FileOutputStream fos=新FileOutputStream(文件,false);
ObjectOutputStream os=新的ObjectOutputStream(fos);
os.writeObject(classtosave);
os.flush();
os.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
public void load(字符串savename)抛出ClassNotFoundException、StreamCorruptedException、IOException{
如果(外部存储可用){
File File=新文件(ctxt.getExternalFilesDir(null),savename);
FileInputStream fis=新的FileInputStream(文件);
ObjectInputStream is=新的ObjectInputStream(fis);
ClassToSave ClassToSave=(ClassToSave)为.readObject();
for(int i=0;i 如果(classtosave.classtosavelist.get(i).done==true){您的构造函数遗漏了布尔值和int值。它应该是这样的:
public classToSave(boolean done, int lvl, String s, int x, int y, Skill parent, Item
item, int cost) {
this.done = done;
this.lvl = lvl;
...
}
为了更快地获得更好的帮助,请将您的代码发布为演示您的问题的类。这允许用户复制/粘贴和重现您的问题。也就是说,继续您的屠杀,直到您有几个类(独立地)进行编译其中一个包含触发问题的main
方法。Hmmm.好的。我是否需要将其转换为在PC上工作,因为这是Android。似乎不工作。这可能与我现在如何加载它有关?同样的事情。只有int-Extra被正确保存和加载。除非您自定义了readObject()和writeObject()在类中保存时,还需要所有参数的getter。如果不想修改构造函数,也可以使用setter。
public classToSave(boolean done, int lvl, String s, int x, int y, Skill parent, Item
item, int cost) {
this.done = done;
this.lvl = lvl;
...
}