Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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 为什么我不能正确保存和加载这些序列化变量?_Java_Android_Serialization_Fileinputstream - Fatal编程技术网

Java 为什么我不能正确保存和加载这些序列化变量?

Java 为什么我不能正确保存和加载这些序列化变量?,java,android,serialization,fileinputstream,Java,Android,Serialization,Fileinputstream,好的,我会尽量把这件事说清楚。我希望在我得到答案之前,它不会被标记 我正在尝试序列化一个类来保存它,它工作得很好。但有些变量没有正确加载。代码如下: 我还标出了代码起作用和不起作用的地方 编辑:简化代码多一点 类im保存:(它的简单版本) 公共类classToSave实现了可序列化{ /** * */ 私有静态最终长serialVersionUID=-5184436214950145051L; public static List classtosavelist=new ArrayList()

好的,我会尽量把这件事说清楚。我希望在我得到答案之前,它不会被标记

我正在尝试序列化一个类来保存它,它工作得很好。但有些变量没有正确加载。代码如下: 我还标出了代码起作用和不起作用的地方

编辑:简化代码多一点

类im保存:(它的简单版本)

公共类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;
     ...
}