java - 读取 Json 文件时出现 libGDX And​​roid SerializationException

标签 java android json eclipse libgdx

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

目前,菜单只有按钮,因为我只是想知道如何实现它。

当我运行 Desktop 项目时,菜单工作得很好,但是当我在 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。

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

编辑:

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

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

最佳答案

我发现了问题。

问题是这样的:

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

black32.fnt 应该是 Black32.fnt

我不知道文件在 Android 上必须区分大小写。我没有意识到这是问题所在,因为......好吧 1. 它从未说过字体文件是问题所在,并且 2. 桌面版本运行良好。

感谢 libGDX 论坛的 sickmartian,我解决了这个问题

我还要感谢 Tenfour04 的投入。

关于java - 读取 Json 文件时出现 libGDX And​​roid SerializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27934132/

相关文章:

旋转设备时 ScrollView 中出现 java.lang.IllegalStateException

java - 使用 Gson 或 Jackson 将 JSON 字符串展平,使包含每个级别键值的键映射到 Map<String, String>

Java Swing 游戏随着时间的推移而滞后

java - 无法播放流媒体onstart方法android

java - XPTY0004 : Required item type of first operand of '>' is numeric; supplied value has item type xs:string

android - 使用 FusedLocationApi 搜索地点

php - Survey Monkey (get_survey_list) 返回错误的 JSON

javascript - 来自 JSON D3.JS 的分组条形图

Java - While循环不会退出

java - 在 Swing 应用程序中嵌入 JFXPanel 在添加/删除时失败