当ontext改变时,float.parsefloat numberformatexception

时间:2013-02-10 04:20:47

标签: android android-edittext numberformatexception

这是我的代码片段,我在动态检查edittext输入。

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开发的初学者

1 个答案:

答案 0 :(得分: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