0

わかりました、これをできるだけ明確にしようとします。回答を得る前にフラグが立てられないことを願っています。

正常に動作する保存用のクラスをシリアル化しようとしています。しかし、一部の変数が正しくロードされていません。コードは次のとおりです。コードが機能している場所と機能していない場所もマークしました。

編集:コードをもう少し簡略化しました。

Class im Saving: (簡易版)

public class classToSave implements Serializable {


/**
 * 
 */
private static final long serialVersionUID = -5184436214950145051L;

public static List<classToSave> classtosavelist = new ArrayList<classToSave>();

public static classToSave one   = new OtherClass1("1", 1, 1, null, Item.1, 1); 
public static classToSave two   = new OtherClass1("2", 1, 2, one , Item.2, 1);  
public static classToSave three = new OtherClass2("3", 1, 4, two , Item.3, 2);

public boolean done = false;     < WONT LOAD/SAVE
public int lvl = 0;              < WONT LOAD/SAVE
transient protected String name; < OK
protected int Xpos;              < OK 
protected int Ypos;              < OK
public Skill parent;             < OK
protected Item item;             < OK
public int extra = 0;            < OK (This Works..)



public classToSave(String s, int x, int y, Skill parent, Item item, int cost) {
    this.name = s;
    this.Xpos = x;
    this.Ypos = y;
    if(parent != null) {
        this.Xpos += parent.Xpos;
        this.Ypos += parent.Ypos;
    }
    this.parent = parent;
    this.item = item;
    add(this, s);
}

private void add(classToSave classtosave, String name) {
    boolean flag = true;
    for(int i = 0; i < skills.size(); i++) {
        if(classtosavelist.get(i).getName().equalsIgnoreCase(name)) {
            flag = false;
        }
    }
    if(flag) {
        classtosavelist.add(classtosave);
    }
}

public int needPoints() {
    return 1 + extra;
}

public boolean Done(int points) {
    if(points >= needPoints()) {
        this.done = true;
    }
    return this.done;
}

public int getLevel() {
    return this.lvl;
}

public int MAXLevel() {
    return 1;
}

public void LevelUp() {
    if(this.lvl < MAXLevel()) {
        this.lvl++;
    }
}

public void Reset() {
    this.lvl = 0;
}

public Item getRenderItem() {
    return this.item;
}

public String getName() {
    return this.name;
}

public Skill getParent() {
    return this.parent;
}

public boolean isCompleteDone() {
    return (getLevel() == MAXLevel() && done);
}

保存と読み込みは次のとおりです。

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();

}

括弧がずれていたらごめんなさい。このコードは、読みやすくするために解体されました (名前が変更され、変更されました)。

しかし、基本的にこのコードは「スキルツリー」に使用され、そのスキルが完了しているかどうかを保存することになっています。

これを修正する必要がある場合はお知らせください。必要に応じてさらに多くのコードを提供することもできます。

4

1 に答える 1

0

あなたのコンストラクターはブール値と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;
     ...
}
于 2013-08-20T15:08:50.367 に答える