LibGDX SerializationException由未找到字段引起



目前我正致力于游戏的数据保存(和加载)部分,使用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)它工作

相关内容

  • 没有找到相关文章

最新更新