java.lang.NumberFormatException: For input string: “.“
Posted 無昂博奥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.lang.NumberFormatException: For input string: “.“相关的知识,希望对你有一定的参考价值。
在android开发的过程中,有时候对输入框中的值进行数字类型转换时经常出现NumberFormatException。其根本原因就是被转换的字符不是一个数字。
下面是我遇到的一种情况:
xml内容如下:
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:maxEms="7"
android:maxLength="7"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:inputType="numberDecimal" />
复现步骤:
在输入框中,直接输入.
时出现异常。
异常日志:
java.lang.NumberFormatException: For input string: "."
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
at java.lang.Float.parseFloat(Float.java:452)
原因分析
在Java代码中设置了addTextChangedListener
监听器,当文本改变的时候,进行了数字类型转换。所以在转换的时候就会有一个风险,就是当输入的不是数字类型的字符时,就会出现NumberFormat异常。
etActualVol.addTextChangedListener(new TextWatcher()
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
if (!s.toString().trim().equals(""))
Float.parseFloat(input);
@Override
public void afterTextChanged(Editable s)
);
解决办法
在监听文本变化的函数中增加判断函数,或者增加校验规则。
etActualVol.addTextChangedListener(new TextWatcher()
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
if (!s.toString().trim().equals("") && !s.toString().startsWith("."))
Float.parseFloat(input);
@Override
public void afterTextChanged(Editable s)
);
以上。
以上是关于java.lang.NumberFormatException: For input string: “.“的主要内容,如果未能解决你的问题,请参考以下文章