尝试执行这段代码时:
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);
我收到错误:
线程“LWJGL应用程序”中的异常 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:类不能 被创建(缺少no-arg构造函数):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 at com.badlogic.gdx.utils.Json.readValue(Json.java:803)at 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 at com.bvo.easyBim.View.WorldRenderer.render(WorldRenderer.java:106)at 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) 在 com.badlogic.gdx.backends.lwjgl.LwjglApplication $ 1.run(LwjglApplication.java:110) 引起:java.lang.InstantiationException: java.lang.Class.newInstance0中的com.bvo.easyBim.Model.Cursor(未知 来自)java.lang.Class.newInstance(未知来源)at com.badlogic.gdx.utils.Json.newInstance(Json.java:901)... 12更多
我正在尝试将json文件在正确保存在另一段代码中之后转换回数据图。 (一个hashmap),但这似乎不起作用。
我猜他无法读取文字字符串,但实际上我不知道问题是什么。
答案 0 :(得分:6)
异常消息“无法创建类(缺少无参数构造函数):com.bvo.easyBim.Model.Cursor”确切地描述了出错的地方。
Libgdx JSON代码使用反射来创建对象的实例并初始化它们。在您的示例中,保存的JSON文件中必须有com.bvo.easyBim.Model.Cursor
。因此,在读取该文件时,JSON代码需要创建一个Cursor
的实例来放入数据。它假定有一个无参构造函数可以用来创建一个空Cursor
(它不能确定哪个构造函数适合否则)。但是,似乎没有这样的方法。
您必须向Cursor
添加无参数构造函数,否则您将需要添加知道如何保存Cursor
实例的自定义序列化程序(请参阅https://code.google.com/p/libgdx/wiki/JsonParsing#Customizing_serialization)并且知道在阅读Cursor
时要调用的适当构造函数。