2012-09-10 50 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使用逗号 –

相关问题