0

这是我的一段代码,我在其中动态检查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 开发的初学者

4

1 回答 1

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.

于 2013-02-10T05:33:59.213 回答