【问题标题】:how to avoid the exception when nothing is entered in edittext?在edittext中没有输入任何内容时如何避免异常?
【发布时间】:2025-12-15 15:45:01
【问题描述】:

我创建了用户可以在其中输入数字的编辑文本。在我的应用程序中,用户可以通过单击提交按钮来提交值。(注意:最初我在代码中使用 setText() 将所有 3 个 EditTexts 设置为“”)提交后,我保留了以下几行来检索方法中的值。

String st1=editText1.getText().toString();
int tempVal1=Integer.parseInt(st);
String st2=editText2.getText().toString();
int tempVa2=Integer.parseInt(st);
String st3=editText2.getText().toString();
int tempVal3=Integer.parseInt(st);

但是这里我的问题是,如果用户没有在第一个 editText 中输入任何值并且只填写第 2 和第 3 并提交,那么 tempVal1 中的值应该是 0。但是由于第一个语句,我得到了异常因为没有任何数据。当他没有在相应的编辑文本中填写任何内容时,如何避免此异常并保持 tempVal 0?

我还有一个疑问,当我添加此 int x=Integer.valueOf(editText.getText()); 行时,我收到以下错误。为什么?The method valueOf(String) in the type Integer is not applicable for the arguments (Editable)

请澄清我的疑问。

【问题讨论】:

    标签: android exception android-edittext


    【解决方案1】:

    在转换为数字之前,您需要检查EditText

    if( !editText1.getText().toString().equals("") && editText1.getText().toString().length() > 0 )
    {
        // Get String
        Integer.parseInt(editText1.getText().toString());
    }
    

    【讨论】:

      【解决方案2】:

      您必须检查编辑文本不为空或编辑文本中没有值的条件,如下所示。

      EditText 的条件不是空白。

      if(editText1.getText().toString().length() != 0)
      {
          // Get String
          Integer.parseInt(editText1.getText().toString());
      }
      

      【讨论】:

      • 有一种方法可以减少转换:TextUtils.isEmpty(editText1.getText()) 如果字符串为空或长度为 0,则返回 true。
      【解决方案3】:

      Integer 类型中的 valueOf(String) 方法不适用于 参数(可编辑)

      意味着它正在寻找一个字符串参数但得到一个Editable

      试试x=Integer.valueOf(editText.getText().toString());

      关于异常:

      Try & Catch 包围您的代码,或者在解析整数之前进行 Null 检查。

      【讨论】:

        【解决方案4】:

        你必须得到 NumberFormatException,因为 String 是空白的,并且空白不能被解析成整数。 因此,将这些变量初始化为 0. 并将解析代码放入 try catch。如下:

        int tempVal1=0;
        int tempVal2=0;
        int tempVal3=0;
        
        String st1=editText1.getText().toString();
        try{    
          tempVal1=Integer.parseInt(st1);
        }
        catch(NumberFormatException ex) {}
        
        String st2=editText2.getText().toString();
        try{
           tempVal2=Integer.parseInt(st2);
        }
        catch(NumberFormatException ex){}
        
        String st3=editText2.getText().toString();
        try{    
           tempVal3=Integer.parseInt(st3);
        }
        catch(NumberFormatException ex){}
        

        【讨论】:

        • 第一个解决更多错误的答案,而不仅仅是空编辑框。但是:您不需要在 catch 块中分配任何内容,因为变量都已经等于 0(并且如果我们落入catch),它不会改变,而且 - 操作说明 - 默默地改变用户输入(有效地)可能不是最好的主意。至少弹出一些错误框,说明默认情况下未输入的值为0(或让他知道其他方式)
        • 是的,我们可以在 catch 块中删除这些语句,我已经进行了更改。
        • 我还编辑了您的回答,因为您在变量名称中有拼写错误,并且我稍微更改了格式...顺便说一句,如果您为问题的第二部分添加解释(关于可编辑),我认为您的答案将是完整的并且有资格被接受...
        • 感谢编辑,但 NumberFormatException 本身不是不言自明的。
        • 这不是一种正确的编码方式。为什么要捕获一个你肯定会发生的异常。而是使用必要的检查来避免它。 TextUtils.isEmpty(editText1.getText()) 似乎是最简单的检查方法。