2015-01-14 52 views
1

我想创建一个与scene2D菜单,并让它与android兼容。libGDX And​​roid SerializationException当阅读JSON文件

目前,该菜单只有按钮,因为我只是搞清楚我应该如何实现这一点。

当我运行桌面项目时,菜单运行得非常好,但是当我在android上运行时,我得到一个导致应用程序崩溃的序列化异常:P。

如果桌面版本可以运行没有错误,那么json文件不是问题。

起初我使用的是libGDX 1.3.1,虽然这是问题所在。我尝试了1.5.2和1.5.3快照,但仍然是同样的问题。然后我尝试升级/更新我的Android版本和API从19到20,仍然是相同的错误。

任何人都知道这个解决方案或可能导致此问题?

这是logcat的日志:

01-13 16:39:21.523: V/AwesomePlayer(224): startAudioPlayer_l error status=0 
01-13 16:39:50.474: W/NEXTREAMING(224): INF0:[APIs_Core.c 2314] nexPlayer_Close_Core Already  Closed(NEXPLAYER_ERROR_HAS_NO_EFFECT) 
01-13 16:39:50.494: W/NEXTREAMING(224): INF0:[APIs_Core.c 3228] nexPlayer_Stop_Core Already Stopped(NEXPLAYER_ERROR_HAS_NO_EFFECT) 
01-13 16:39:50.494: W/NEXTREAMING(224): INF0:[APIs_Core.c 2314] nexPlayer_Close_Core Already Closed(NEXPLAYER_ERROR_HAS_NO_EFFECT) 
01-13 16:39:50.494: W/NEXTREAMING(224): INF0:[APIs_Core.c 3228] nexPlayer_Stop_Core Already Stopped(NEXPLAYER_ERROR_HAS_NO_EFFECT) 
01-13 16:39:50.494: W/NEXTREAMING(224): INF0:[APIs_Core.c 2314] nexPlayer_Close_Core Already Closed(NEXPLAYER_ERROR_HAS_NO_EFFECT) 
01-13 16:39:50.805: E/AndroidRuntime(18220): com.badlogic.gdx.utils.SerializationException: Error reading file: menus/ui/menuSkin.json 
01-13 16:39:50.805: E/AndroidRuntime(18220): Caused by: com.badlogic.gdx.utils.SerializationException: Error reading file: menus/ui/menuSkin.json 

编辑:在试图再次运行它,同样的例外,如发生以上登录,但现在有一些额外的信息。

01-13 19:52:24.574: E/AndroidRuntime(20675): at com.badlogic.gdx.utils.Json.fromJson(Json.java:683) 
01-13 19:52:24.574: E/AndroidRuntime(20675): at com.badlogic.gdx.utils.Json.readValue(Json.java:873) 
01-13 19:52:24.574: E/AndroidRuntime(20675): at com.badlogic.gdx.utils.Json.readValue(Json.java:834) 
01-13 19:52:24.574: E/AndroidRuntime(20675): at com.badlogic.gdx.utils.Json.readValue(Json.java:873) 
01-13 19:52:24.574: E/AndroidRuntime(20675): at com.badlogic.gdx.utils.Json.fromJson(Json.java:681) 

这是我如何检索JSON文件在我的代码

skin = new Skin(Gdx.files.internal("menus/ui/menuSkin.json"), texture); 

这里是如果你需要它的JSON文件:我使用Eclipse的方式

{ 
    "com.badlogic.gdx.graphics.Color":{ 
    "white": {"r":1, "g":1, "b":1, "a":1}, 
    "black": {"r":0, "g":0, "b":0, "a":1}, 
    "red": {"r":1, "g":0, "b":0, "a":1}, 
    "green": {"r":0, "g":1, "b":0, "a":1}, 
    "blue": {"r":0, "g":0, "b":1, "a":1} 
}, 
"com.badlogic.gdx.graphics.g2d.BitmapFont":{ 
    "black32": {"file":"menus/fonts/black32.fnt"} 
}, 
"com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle":{ 
    "default": {"up":"buttonPlay.up","down":"buttonPlay.down","font":"black32"}  
}, 
"com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle": { 
    "default": {"font": "black32", "fontColor": "red"} 
} 


} 

我在我的手机上运行/测试我的android应用程序,一个LG Motion。

编辑:

做了一些调试和日志记录。 当我登录Gdx.files.internal(“menus/ui/menuSkin.json”)。exists()时,它在log cat中返回true。

我也尝试使用外部,本地和类路径而不是内部但没有面团。在文件中也没有发现太多。

+0

我检查了源,并且文件上的任何IOException都会在Json类中作为SerializationException冒泡。可能想检查你的文件结构。也许你已经在桌面上正确设置了它,而不是在你的Android版本上。 – Tenfour04

回答

1

我发现了这个问题。

的问题是这样的:

“black32”:{ “文件”: “菜单/字体/ black32.fnt”}

black32.fnt应该已经Black32.fnt

我不知道文件必须在Android上区分大小写。我没有意识到这是问题所在,因为......嗯1.它从来没有说过字体文件是问题,2.桌面版本工作正常。

我解决了这个问题,由于从libGDX论坛

我也想感谢Tenfour04为他们输入到sickmartian。