阅读Json文件时的libGDX And​​roid SerializationException

时间:2015-01-14 00:49:45

标签: java android json eclipse libgdx

我正在尝试使用scene2D创建一个菜单,并使其与android兼容。

目前,菜单只有按钮,因为我只是想弄清楚我应该如何实现它。

当我运行桌面项目时,菜单工作正常,但是当我在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文件:

{   
   "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"}
}


}

我顺便使用Eclipse。

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

编辑:

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

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

1 个答案:

答案 0 :(得分:1)

我找到了问题。

问题在于:

" black32":{" file":" menus / fonts / black32.fnt"}

black32.fnt应该是Black32.fnt

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

我感谢libGDX论坛中的sickmartian

解决了这个问题

我还要感谢Tenfour04的投入。