我正在尝试为我的LibGdx游戏实现一个保存功能。这只是为了学习目的,所以我试图在手机上重新创建Fallout Shelter游戏,但就像桌面版一样。当我尝试保存或加载时,我收到此错误:
private void Load() {
try {
// Open file to read from, named SavedObj.sav.
FileInputStream saveFile = new FileInputStream("SaveGame.sav");
// Create an ObjectInputStream to get objects from save file.
ObjectInputStream save = new ObjectInputStream(saveFile);
energy = (Integer) save.readObject();
System.out.println(energy);
food = (Integer) save.readObject();
System.out.println(food);
water = (Integer) save.readObject();
System.out.println(water);
maxEnergy = (Integer) save.readObject();
System.out.println(maxEnergy);
maxFood = (Integer) save.readObject();
System.out.println(maxFood);
maxWater = (Integer) save.readObject();
System.out.println(maxWater);
caps = (Integer) save.readObject();
System.out.println(caps);
maxDwellers = (Integer) save.readObject();
System.out.println(maxDwellers);
dwellers = (Array<Dweller>) save.readObject();
//Close the save file
save.close();
} catch (Exception exc) {
exc.printStackTrace(); // If there was an error, print the info.
}
}
这是加载方法,在游戏启动时调用并始终导致错误
dwellers = (Array<Dweller>) save.readObject();
当我尝试加载Dwellers列表时,它总是发现该行的问题(保存具有相同的错误并在同一行中发现错误)
av_get_bytes_per_sample( static_cast<AVSampleFormat>(format) )
#undef av_err2str
#define av_err2str(errnum) \
av_make_error_string((char*)__builtin_alloca(AV_ERROR_MAX_STRING_SIZE), AV_ERROR_MAX_STRING_SIZE, errnum)
#undef av_ts2timestr
#define av_ts2timestr(ts, tb) \
av_ts_make_time_string((char*)__builtin_alloca(AV_TS_MAX_STRING_SIZE), ts, tb)
然后它给出了上面提到的错误。这个类正在使用java.io.Serializable并且已经实现了,正如其他类似的问题所表明的那样,但无论是否实现它我仍然会得到相同的错误。
答案 0 :(得分:1)
例外情况是说您正在尝试序列化com.badlogic.gdx.utils.Array
的实例...而且您无法做到。
根据javadoc,您尝试序列化的Array
类未实现Serializable
。
您尚未提供足够的信息以进行正确的诊断/修复,但我怀疑Dweller
直接或间接使用Array
类,这是根本原因。可能的解决方案可能是标记Array
字段瞬态,和/或实现自定义序列化方法(readObject
,writeObject
等)。