Lib Gdx json序列化异常并缺少no-arg构造函数

ber*_*tvo 2 java serialization filehandle libgdx

当试图执行这段代码时:

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);
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

线程"LWJGL Application"中的异常com.badlogic.gdx.utils.GdxRuntimeException:com.badlogic.gdx.utils.SerializationException:无法创建类(缺少no-arg构造函数):com.bvo.easyBim.Model.Cursor at com .badlogic.gdx.backends.lwjgl.LwjglApplication $ 1.run(LwjglApplication.java:113)引起:com.badlogic.gdx.utils.SerializationException:无法创建类(缺少无参数构造函数):com.bvo.easyBim .Model.Cursor 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)位于com.badlogic.gdx.utils.Json.fromJson(Json.java:644)的com.bvo.easyBim.View.DataProcessor.load(DataProcessor.java:85)at com.bvo.easyBim.View.World.init(World.java:115)com.bvo.easyBim.View.WorldRenderer.buttons(WorldRenderer.java:173)com.bvo.easyBim.View.WorldRenderer.render( WorldRenderer.java:106)位于com.badlogic的com.bvo.easyBim.Screens.AppScreen.render(AppScreen.java:22).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)在com.badlogic.gdx.backends.lwjgl.LwjglApplication $ 1.run(LwjglApplication.java:110)引起:java.lang.InstantiationException:com.bvo.easyBim.Model.Cursor at java.lang.Class.newInstance0(Unknown)来自java.lang.Class.newInstance(未知来源)的com.badlogic.gdx.utils.Json.newInstance(Json.java:901)... 12更多

在将其正确保存在另一段代码中后,我试图将json文件转换回数据图.(一个hashmap),但这似乎不起作用.

我猜他无法读取文本字符串,但实际上我不知道问题是什么.

P.T*_*.T. 6

异常消息"无法创建类(缺少无参数构造函数):com.bvo.easyBim.Model.Cursor"确切地描述了出错的地方.

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

您将不得不添加无参数构造函数Cursor,或者您必须添加知道如何保存的自定义序列化程序(请参阅https://code.google.com/p/libgdx/wiki/JsonParsing#Customizing_serialization)Cursor实例并且知道在读Cursor回来时要调用的适当构造函数.