2013-03-07 57 views
2

當試圖執行這段代碼:庫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文件轉換回在它被正確地保存在另一段代碼之後進入數據映射。 (哈希表),但這似乎不起作用。

我猜測他無法讀取文本字符串,但我其實不知道問題是什麼。

回答

6

異常消息「無法創建類(缺少無參數構造函數):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時要調用回來。

相關問題