2013-02-10 103 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

相關問題