Android:Integer.parseInt()从不抛出异常

时间:2014-10-28 17:33:41

标签: java android string exception parseint

我的Activity中有一些EditText。用户必须填写它们并确认他的输入。一些EditText仅用于数字。为了确保只有有效值,我试图使用Integer.parseInt(...)将输入转换为Integer。问题是无论字符串是什么,都不会抛出NumberFormatException。我解决了这个问题,每次都会执行相应的行,但不会抛出异常。

以下是我的方法代码:

private boolean formNotEmpty()
{
    boolean returnValue = true;
    for(int i = 0; i < _editText.size();i++){
        if(_editText.get(i).getText().toString().trim().length() == 0)
        {
            returnValue = false;
            _toastMessage = "Es müssen alle Felder ausgefüllt werden.";
            break;
        }else if(_editText.get(i).getHint().equals(getResources().getString(R.string.rentactivity_hint_userPLZ))
               ||_editText.get(i).getHint().equals(getResources().getString(R.string.rentactivity_hint_userTelefon)))
        {
            try{
                Integer.parseInt(_editText.get(i).getText().toString().trim());
            }catch(NumberFormatException e)
            {
                _toastMessage += "In "+_editText.get(i).getHint().toString() +" dürfen nur Zahlen stehen. \n";
            }
        }
    }
    return returnValue;
}

我忘了将catch块中的returnValue设置为false。如果方法返回true,则_toastMessage将获取一个新字符串。这就是我假设永远不会抛出异常的原因。对于我造成的麻烦,我真的很抱歉。

非常感谢

2 个答案:

答案 0 :(得分:0)

如果你指望代码抛出异常,并且你想用它来验证数据只接受数字,那么这不是正确的方法。异常处理不应该像你建议的那样明确地用作if-else。一种更简单,也许更正确的方法来实现你想要的东西:

在布局xml中声明

android:inputType="number"

对于特定的edittext,您只想将条目限制为数字。

执行此操作时,只有当您尝试以用户身份填写editText时,才能选择输入数字。在xml中添加后,您无需依赖Integer.parseInt()API来引发异常,以进行验证。

答案 1 :(得分:0)

您也可以使用EditText的attr:

android:digits="0123456789." 

http://developer.android.com/reference/android/widget/TextView.html#attr_android:digits

之后用户只能写数字。