2012-11-30 117 views
0

怪異NumberFormatException的我最近發佈的一款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

字符串文件表示級數據的遊戲... – BLOB

+0

區域設置...幾乎整個歐洲都喜歡逗號而不是小數點分隔符......而你沒有說h你解析它......'NumberFormat.parse'還是什麼? – Selvin

+0

我用自己的代碼解析它,檢查逗號是否存在,並相應地分離浮點數。它在我測試過的所有手機中工作正常! – BLOB

回答

0

此問題是由語言造成的,因此在「。」和「 E該用逗號「」 如果您使用的模式這樣

+0

我正在使用###。##模式..所以我需要用逗號和所有逗號替換所有點與其他字符來解決所有區域設置? – BLOB

+0

愚蠢的想法,如果你需要用點解析字符串只是強制區域...異常成本太多... – Selvin

+0

Selvin ...我不明白你的意思..我對Java本身相當新,我不明白什麼你的意思是「例外是昂貴的」。原諒我的無知 – BLOB

1

如果此行引起的問題‘## ###’:

cam = new Camera(Float.valueOf(df.format(worldWidth)),fourPointEightFixer); 

你應該(假設worldWidth更換是浮點/雙精度):

cam = new Camera(/*cast (float) if worldWidth is double*/worldWidth,fourPointEightFixer); 

第一:沒有必要改變這個值的字符串,並再次對其進行分析,第二: 我敢肯定,df.format(double/float)可以返回DOUB的字符串表示LE /浮球逗號作爲設備小數點分隔符,其中語言/區域設置使用逗號作爲分隔符(幾乎全非英語歐洲)

,或者你可以強迫區域,當你創建/獲取實例DecimalFormat到區域設置:

DecimalFormat df = (DecimalFormat)NumberFormat.getNumberInstance(Locale.US); 

我認爲,阿里(捕獲例外)提供快速解決不好(如在醒目預期例外是不好的編程習慣)

相關問題