我最近在google play中发布了一款Android游戏,但我收到了此 NumberFormatException 的崩溃报告
我甚至指出了它来自的代码..但最让我担心的是异常并没有被我测试过的任何设备抛出(我在很多设备上测试过) ..
我有一个像这样安排的字符串文件...... “10.48,1.6,90.0,1.155,1.73”其中每个浮点数用逗号分隔......我不知道为什么我的应用程序的用户发生了这个奇怪的异常:(
以下是我用于从文件中解析的代码
while(j<line.length())
{
if(line.charAt(j) == ',')
{
endingPoint = j;
planetList[i].add(Float.valueOf(line.substring(startingPoint, endingPoint)));
startingPoint = j+1;
}
else if(line.charAt(j) == 's')
{
i++;
startingPoint = j+1;
}
j++;
}
这是抛出异常的行......
cam = new Camera(Float.valueOf(df.format(worldWidth)),fourPointEightFixer);
这是堆栈追踪我的应用程序的用户:
java.lang.NumberFormatException
at org.apache.harmony.luni.util.FloatingPointParser.parseFltImpl(Native Method)
at org.apache.harmony.luni.util.FloatingPointParser.parseFloat(FloatingPointParser.java:321)
at java.lang.Float.parseFloat(Float.java:323)
at java.lang.Float.valueOf(Float.java:362)
at com.OnMyOwn.Game.WackyGravity.<init>(WackyGravity.java:97)
at com.OnMyOwn.Game.LevelChooserMod.initiateGame(LevelChooserMod.java:550)
at com.OnMyOwn.Game.LevelChooserMod.onButtonTouchUp(LevelChooserMod.java:576)
at com.OnMyOwn.Game.LevelChooserMod.update(LevelChooserMod.java:384)
at com.OnMyOwn.framework.impl.GLGame.onDrawFrame(GLGame.java:165)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1363)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1118)
答案 0 :(得分:1)
如果此行导致问题:
cam = new Camera(Float.valueOf(df.format(worldWidth)),fourPointEightFixer);
你应该替换它(假设worldWidth
是float / double):
cam = new Camera(/*cast (float) if worldWidth is double*/worldWidth,fourPointEightFixer);
首先:没有必要将此值更改为字符串并再次解析它,第二个:
我很确定df.format(double/float)
可以返回double / float的字符串表示形式,并使用逗号作为设备上的小数分隔符,其中Language / Locale设置为Locale,使用逗号作为分隔符(几乎整个非英语欧洲)
或者您可以在创建/获取实例DecimalFormat
时强制使用区域设置:
DecimalFormat df = (DecimalFormat)NumberFormat.getNumberInstance(Locale.US);
我认为Ali提供的快速修复(捕获异常)不是一个好的解决方案(因为捕获预期的异常是错误的编程实践)
答案 1 :(得分:0)
此问题是由语言引起的,因此在“。”的情况下捕获此异常。并用逗号“,”替换它,如果你使用模式,就像这样“##。###”