2013-02-10 46 views
0

这里是我的一段代码,其中我正在动态检查edittext输入。当ontext发生变化时float.parsefloat numberformatexception

al_e.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub 
      String al_s=s.toString().trim(); 
      if((Float.parseFloat(al_s)<15)|(Float.parseFloat(al_s)>50)|al_s.equals("")){ 
       invalid=1; 
       al_s=""; 
       //Toast.makeText(getApplicationContext(),"Please enter a valid input\nRange [15mm,50mm]", Toast.LENGTH_SHORT).show(); 
       al_e.setError("Please enter a valid input\nRange [15mm,50mm]"); 
      }else{ 
       al=Float.parseFloat(al_s); 
      } 
     } 
    }); 

但当EditText上我输入文字,并使用退格键来清除我得到下面的异常

02-10 09:43:37.186: E/AndroidRuntime(434): FATAL EXCEPTION: main 
02-10 09:43:37.186: E/AndroidRuntime(434): java.lang.NumberFormatException: 
02-10 09:43:37.186: E/AndroidRuntime(434): at org.apache.harmony.luni.util.FloatingPointParser.parseFloat(FloatingPointParser.java:305) 
02-10 09:43:37.186: E/AndroidRuntime(434): at java.lang.Float.parseFloat(Float.java:323) 
02-10 09:43:37.186: E/AndroidRuntime(434): at com.example.iolcalci.Second$4.onTextChanged(Second.java:208) 

搜索类似的问题,但力找到论坛的数量。任何与此有关的帮助。我是Android开发人员的初学者

回答

2

您不能对空字符串使用parseFloat。这就是为什么你会得到一个NumberFormatException。

而不是像下面这样做。

try { 
    float num = Float.parseFloat(al_s); 
    if (num < 15 || num > 50) { 
     // set invalid... 
    } else { 
     al = num; 
    } 
} catch (NumberFormatException e) { 
    // set invalid... 
} 

还要注意的是,即使你做al_s.equals("")检查一个空字符串,它必须是有条件的,而不是最后的第一次测试。否则,该字符串将在测试之前解析,导致NumberFormatException

相关问题