目前我正致力于游戏的数据保存(和加载)部分,使用LibGDX的JSON输出文件编写类。我一直在谷歌上寻找解决方案,并已经接近了,但没有雪茄。到目前为止,我已经成功地尝试将Array<Object>
保存到文件中,但是当我尝试从文件中读取/加载数据时,我得到以下异常:
com.badlogic.gdx.utils.SerializationException: Error reading file: cards.json
at com.badlogic.gdx.utils.Json.fromJson(Json.java:705)
at com.towersvault.unbalanced.util.save.SaveHandler.loadCards(SaveHandler.java:91)
at com.towersvault.unbalanced.util.save.SaveHandler.load(SaveHandler.java:51)
at com.towersvault.unbalanced.UnbalancedMain.create(UnbalancedMain.java:28)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:147)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)
Caused by: com.badlogic.gdx.utils.SerializationException: Field not found: cards (com.badlogic.gdx.utils.Array)
Serialization trace:
{}.cards
at com.badlogic.gdx.utils.Json.readFields(Json.java:790)
at com.badlogic.gdx.utils.Json.readValue(Json.java:919)
at com.badlogic.gdx.utils.Json.fromJson(Json.java:703)
... 5 more
我的JSON文件是这样的:
{
"cards": [
{
"card": "ID_3",
"temper": "LAZY"
},
{
"card": "ID_2",
"temper": "LAZY"
},
{
"card": "ID_1",
"temper": "LAZY"
},
{
"card": "ID_1",
"temper": "LAZY"
}
]
}
我的加载方法的源代码如下所示:
Array<CardData> loadedCards = json.fromJson(Array.class, CardData.class, Gdx.files.local("cards.json");
CardData
类有两个变量,即private Card card;
(输入它,变量是我为每个卡的实例设置的枚举)和private CardTemper temper;
(也是一个与另一个相同的枚举)。当我进一步实现其余功能时,必须有卡的实例,因为它们都不相同。
我不确定我到底哪里出了问题,我认为这主要是由于我缺乏处理保存和加载游戏信息的经验。
如果有人能帮助我,我将不胜感激。谢谢,Clifford
一个可能的解决方案是像这样创建新的类Cards
:
public class Cards {
private Array<CardData> cards;
public Array<CardData> getCards() {
return cards;
}
public void setCards(Array<CardData> cards) {
this.cards = cards;
}
}
,然后检索如下值:
Cards cardsJson = json.fromJson(Cards.class, Gdx.files.local("cards.json"));
Array<CardData> loadedCards = cardsJson.getCards();
另一个是将json文件更改为:
[
{
"card": "ID_3",
"temper": "LAZY"
},
{
"card": "ID_2",
"temper": "LAZY"
},
{
"card": "ID_1",
"temper": "LAZY"
},
{
"card": "ID_1",
"temper": "LAZY"
}
]
然后检索如下值:
Array<CardData> fromJson = json.fromJson(Array.class, CardData.class, Gdx.files.local("cards.json"));
我更喜欢第一种变体,但由你来选择。
当我试图从JSON字符串解析为具有原语的对象时,我遇到了这个问题…
将对象类型更改为int而不是Integer使其再次工作。
澄清一下,这只发生在我将项目从纯Java更改为Android时(apply plugin: "java" to apply plugin: "android" on gradle)对于java项目(使用Libgdx的json或Gson)它工作