libGDX Android 读取 Json 文件时出现 SerializationException
libGDX Android SerializationException When Reading Json File
我正在尝试使用 scene2D 创建菜单并使其与 android 兼容。
目前,菜单只有按钮,因为我只是想知道如何实现它。
当我 运行 桌面项目时,菜单工作得很好,但是当我 运行 在 android 上时,我得到一个导致应用程序崩溃的序列化异常:P.
如果桌面版可以运行没有错误,那么json文件不是问题。
起初我使用的是 libGDX 1.3.1,尽管这是问题所在。我尝试了 1.5.2 和 1.5.3 快照,但仍然是同样的问题。然后我尝试了 upgrading/updating 我的 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
我 run/test 我的 android 应用程序在我的 phone 上,一个 LG Motion。
编辑:
进行了一些调试和记录。
当我记录 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 的投入。
我正在尝试使用 scene2D 创建菜单并使其与 android 兼容。
目前,菜单只有按钮,因为我只是想知道如何实现它。
当我 运行 桌面项目时,菜单工作得很好,但是当我 运行 在 android 上时,我得到一个导致应用程序崩溃的序列化异常:P.
如果桌面版可以运行没有错误,那么json文件不是问题。
起初我使用的是 libGDX 1.3.1,尽管这是问题所在。我尝试了 1.5.2 和 1.5.3 快照,但仍然是同样的问题。然后我尝试了 upgrading/updating 我的 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
我 run/test 我的 android 应用程序在我的 phone 上,一个 LG Motion。
编辑:
进行了一些调试和记录。 当我记录 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 的投入。