ObjectInputStream readObject 仅在某些 android 设备上返回 null

问题描述

我正在开发一个使用 libgdx 的游戏,我通过保存一个实现 Serializable 的类来保存游戏的状态。它在台式机和我拥有的几个 android 设备上运行良好,但它仍然在其他人的设备上运行。我不知道是什么原因造成的。

以下是我保存和加载对象的方法

public static GameData gd;

final static String fileName = "sa.sav";

public static void save() {
    try {

        ObjectOutputStream out = new ObjectOutputStream(
                Gdx.files.local(fileName).write(false));

        out.writeObject(gd);
        out.close();
    } catch(Exception e) {
        e.printstacktrace();
        Gdx.app.exit();
    }
}

public static void load() {
    try {
        if(!saveFileExists()) {
            init();
            return;
        }

        ObjectInputStream in = new ObjectInputStream(
                Gdx.files.local(fileName).read());

        Gdx.app.log("Save","in = " + in);
        gd = (GameData) in.readobject();
        Gdx.app.log("Save","gd = " + gd);
        in.close();
    } catch(Exception e) {
        e.printstacktrace();
        Gdx.app.exit();
    }
}

public static boolean saveFileExists() {
    return Gdx.files.local(fileName).exists();
}

public static void init() {
    gd = new GameData();
    gd.init();
    save();
}

GameData 类:

public class GameData implements Serializable {

private static final long serialVersionUID = 1;

private int highscores;
private int totalCoins;
final int currentCharacterListVersion = 2;
private int userCharacterListVersion;

private boolean soundEnabled = true;
private float sfxVolume = 6f;
private float musicVolume = 6f;
private int lastLoginDay = 330;
private int dailyBonusCount = 0;

ArrayList<String> characters;

MyMap charList = new MyMap();
MyMap locationList = new MyMap();

}

其中 MyMap 包含 2 个 Map 和一些函数

我不太熟悉如何处理 Serializable objects 因此我不知道该怎么做。我不能使用 Libgdx Preferences,我不仅要存储 StringsIntegers,还要存储 Maps。因此,有关为什么它仅适用于某些设备的任何帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)