我使用游戏库LibGDX创建一个2D游戏。当游戏开始时,一些变量应该用首选项
文件的值填充(见:https://github.com/libgdx/libgdx/wiki/Preferences)。
在我的GamePreferences
类中,我有一个名为helpingRects
的数组(Vector3)。在for循环中,数组应填充prefs文件的值:
for(int i = 0; i < numOfHelpingRects; i++)
{
helpingRects.add(new Vector3(prefs.getFloat("helpingrect" + String.valueOf(i) + "x"), prefs.getFloat("helpingrect" + String.valueOf(i) + "y"), prefs.getFloat("helpingrect" + String.valueOf(i) + "l")));
}
因此,例如,对于i=0
,将添加一个新的help ingRects
向量,其中x值可以在首选项文件中的条目"help ingrect0x"等中找到。
由于我使用LibGDX,我可以在多个平台上运行游戏。在dekStop上,代码工作正常,但在Android上,我得到一个错误消息:
E/AndroidRuntime: FATAL EXCEPTION: GLThread 23941
Process: de.ej.facharbeitsspiel, PID: 13218
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Float
at android.app.SharedPreferencesImpl.getFloat(SharedPreferencesImpl.java:256)
at com.badlogic.gdx.backends.android.AndroidPreferences.getFloat(AndroidPreferences.java:101)
at de.ej.facharbeitsspiel.Tools.GamePreferences.load(GamePreferences.java:65)
at de.ej.facharbeitsspiel.MainClass.create(MainClass.java:26)
at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:275)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1633)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1354)
所以基本上,变量i
,显然是int
,不能转换为浮点值。将i
从int
更改为浮动
没有帮助,因为在这种情况下,i
等于0.0/1.0
等。但是这很糟糕,因为我在. prefs中的条目不被称为"helingrect0.0x”等。
有人知道这个问题的解决方案吗?提前谢谢
用户Tenfour04在这里有正确的想法。Android的首选项文档显示,如果您的值不存在,它将使用您提供的默认值,但如果它已经存在,它将返回该值。最近,当我将一个首选项值从整数更新为浮点时,这种情况就发生了,因为该值已经以整数格式存在于首选项中。通常,你所要做的就是清除应用程序数据(或卸载应用程序)以清除这些首选项,然后它就不会检索到这个旧值。有时在较新的Android设备上,情况并非如此。如果Android设备运行的是Marshmallow或更高版本,您可能需要更改清单中的allowBackup=“false”
。如果设置为true,卸载应用程序或清除数据将不会清除首选项。
首先,如果您使用String.format("%.0f", i),您可以使用浮动i=0
其次,看看你的代码,我发现很难相信错误是因为I
是int
。
为了进行测试,试着编写一行代码,看看是否有效:
helpingRects.add(
new Vector3(prefs.getFloat("helpingrect0x"),
prefs.getFloat("helpingrect0y"),
prefs.getFloat("helpingrect0l")));
我的猜测是上面的方法不起作用,这将表明问题不在于i
是int
。
编辑:以上内容可以扩展如下:
float x = prefs.getFloat("helpingrect0x");
float y = prefs.getFloat("helpingrect0y");
float l = prefs.getFloat("helpingrect0l");
helpingRects.add(new Vector3(x, y, l));
这将进一步有助于解决这个问题。
我创建了一个JasperReport应用程序,它在tomcat服务器上运行良好。但是当我使用相同的jar在Jboss上运行时,它会显示错误 原因:java.lang.ClassCastException:org.apache.xerces.jaxp.DocumentBuilderFactoryImpl无法强制转换为javax.xml.parsers.DocumentBuilderFactor.ne
问题内容: 我正在尝试将字符串转换为,但是得到了。 我的字串是,现在我将其转换为我所拥有的任何一个。 我如何将其转换为它们中的任何一个。 请帮助我摆脱这个问题。 问题答案: 您必须为数字使用适当的语言环境,例如 版画
问题内容: 所以这工作: 但这不是: 总而言之,我得到了第一部分(拳击),但是我发现第二部分不起作用是非常不直观的。是否有特定的原因(除了String从Object继承而int不从Object继承)? 编辑: 为了完善我的问题,这也可以: 但是,以下内容却没有: 令人惊讶的是,您遇到了与String相同的问题: 在最后一行产生类强制转换异常。仍然有效: 问题答案: 我刚刚找到了我正在寻找自己的答案
MainActivity.java 对不起,我的英语很差。
我使用Spring Boot调用Web服务。 我的配置类如下: 我打电话给服务部如下: 我发现以下错误: 如何解组webservice的输出?????如何设置响应的解组器??
尽管CAS服务器在Tomcat下工作得很好,但我有一些问题要使它在WebLogic12c下工作。在Weblogic上部署之前,我遵循以下指南:https://github.com/gentics/gentics-sso-cas/wiki/oracle-weblogic-configuration在webcontent/web-inf/with content中添加文件Weblogic.xml: