库GDX JSON serializationexception和缺失,无参数的构造函数

问题描述:

当试图执行这段代码:库GDX JSON serializationexception和缺失,无参数的构造函数

public void load(String filename) { 
    FileHandle file = Gdx.files.external(filename + ".bim"); 
    Json json = new Json();  
    String text = file.readString(); 
    datamap.clear(); 
    datamap = json.fromJson(HashMap.class, text); 

我得到一个错误:

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.SerializationException: Class cannot be created (missing no-arg constructor): com.bvo.easyBim.Model.Cursor at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:113) Caused by: com.badlogic.gdx.utils.SerializationException: Class cannot be created (missing no-arg constructor): com.bvo.easyBim.Model.Cursor at com.badlogic.gdx.utils.Json.newInstance(Json.java:915) at com.badlogic.gdx.utils.Json.readValue(Json.java:793) at com.badlogic.gdx.utils.Json.readValue(Json.java:803) at com.badlogic.gdx.utils.Json.fromJson(Json.java:644) at com.bvo.easyBim.View.DataProcessor.load(DataProcessor.java:85) at com.bvo.easyBim.View.World.init(World.java:115) at com.bvo.easyBim.View.WorldRenderer.buttons(WorldRenderer.java:173) at com.bvo.easyBim.View.WorldRenderer.render(WorldRenderer.java:106) at com.bvo.easyBim.Screens.AppScreen.render(AppScreen.java:22) at com.badlogic.gdx.Game.render(Game.java:46) at com.bvo.easyBim.EasyBim.render(EasyBim.java:39) at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:187) at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:110) Caused by: java.lang.InstantiationException: com.bvo.easyBim.Model.Cursor at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at com.badlogic.gdx.utils.Json.newInstance(Json.java:901) ... 12 more

我试图JSON文件转换回在它被正确地保存在另一段代码之后进入数据映射。 (哈希表),但这似乎不起作用。

我猜测他无法读取文本字符串,但我其实不知道问题是什么。

异常消息“无法创建类(缺少无参数构造函数):com.bvo.easyBim.Model.Cursor”正确地描述了错误。

Libgdx JSON代码使用反射来创建对象的实例并初始化它们。在您的示例中,保存的JSON文件中必须有com.bvo.easyBim.Model.Cursor。所以当读取该文件时,JSON代码需要创建一个Cursor的实例来放入数据。它假定有一个无参数的构造函数,它可以用来创建一个空的Cursor(它无法确定哪个构造函数是否则适当)。但是,似乎没有这种方法。

你将不得不无参数的构造函数添加到Cursor,否则你就必须添加自定义的串行器(见https://code.google.com/p/libgdx/wiki/JsonParsing#Customizing_serialization),它知道如何保存Cursor实例,并知道适当的构造函数读取Cursor时要调用回来。