2012-09-10 88 views
1

我跑我的應用程序在模擬器中,一切工作正常,但是當我在我的設備中運行它(華爲U8650)我得到NumberFormatException異常:NumberFormatException異常的設備,但是不能在模擬器

GraphViewData[] aux2 = new GraphViewData[aux.length]; 
    for(int i=0;i<aux.length;i++) 
    { 
     System.out.println("reps "+Repetitions+", dato "+i+" = "+aux[i]); 
     if(aux[i] != null) 
     { 
      try{ 
     aux2[i]= new GraphViewData(i, Double.parseDouble(aux[i])); 
      }catch(Exception w) 
     { 
       Toast.makeText(this, "num: "+aux[i], Toast.LENGTH_LONG).show(); 
       Toast.makeText(this, w.getMessage(), Toast.LENGTH_LONG).show(); 
     } 
     } 
} 

唯一的例外是: aux35 [i] = new GraphViewData(i,Double.parseDouble(aux [i])); 好吧,你會認爲aux [i]會解析爲不正確的格式,但所有的數字都是這樣的:70.5或者像這樣84 所以我不知道爲什麼它只在真實設備中給出這種例外,但不是在模擬器中。

有什麼建議嗎?提前致謝。

+1

最有可能的一個語言環境的問題。在一些地區,70,5將會預期而不是70.5 – njzk2

+1

我認爲這可能會幫助你http://stackoverflow.com/questions/7477995/locale-independent-string-to-double –

+0

感謝@Ram kiran與沒有NumberFormatException不過,它似乎像值正在改變,我沒有得到同樣的圖在模擬器和設備 –

回答

0

OK,答案是使用此代碼:

public double stringToDouble(String s) { 

     NumberFormat nf = NumberFormat.getInstance(Locale.getDefault()); 
    nf.setGroupingUsed(false); 
    ParsePosition parsePosition = new ParsePosition(0); 
    Number n = nf.parse(s, parsePosition); 
    if (n == null || parsePosition.getErrorIndex() >= 0 || parsePosition.getIndex() < s.length()) 
    { 
     /* not a valid number */ 
    } 
    return n.doubleValue(); 
} 

這對我的作品

0

我是由不同的語言環境引起的,它指定了與您使用的不同的小數點分隔符(通常它預計爲,,並且您使用.)。在撥打parseDouble()之前,只需更換任何,.,您就會安然無恙。

+0

我不能這樣做,因爲這個應用程序是在不同的語言,例如在英語中,你必須使用點和西班牙語,你tu使用逗號 –

相關問題