Java 将EditText值转换为int

Java 将EditText值转换为int,java,Java,我的程序将数字值设置为editText字段。我正在尝试将editText值转换为整数。我尝试的所有尝试均失败。以下是editText字段接收值的方式: public void onDataChange(DataSnapshot snapshot) { for (DataSnapshot postSnapshot : snapshot.getChildren()) { DogExpenditure dogEx

我的程序将数字值设置为editText字段。我正在尝试将editText值转换为整数。我尝试的所有尝试均失败。以下是editText字段接收值的方式:

public void onDataChange(DataSnapshot snapshot) {

                    for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                        DogExpenditure dogExpenditure = postSnapshot.getValue(DogExpenditure.class);

                        totalAmount[0] += dogExpenditure.getAmount();
                        textView3.setText(Integer.toString(totalAmount[0] ));

                    }
                }
textView3.setTextInteger.toStringtotalAmount[0]我之所以这样做,是因为除了在该程序中之外,totalAmount[0]无法在任何其他地方访问,因此我决定从编辑文本中提取它。虽然我尚未成功,但对此不确定。我获取java.lang.NumberFormatException:无效int:错误: 以下是我如何尝试的:

String diff = String.valueOf(textView3.getText());

        Integer x = Integer.valueOf(diff);
        String saley = String.valueOf(textView5.getText());
        Integer v = Integer.valueOf(saley);

注意:textView5和textView5都是EditText字段。

启动时,EditText的值似乎是空字符串。 我认为最好检查空字符串,或者确保初始值不是空字符串

String diff = String.valueOf(textView3.getText());
Integer x = null;
if(!diff.trim().isEmpty())
    x = Integer.valueOf(diff);
NumberFormatException告诉您字符串不是数字

这里,字符串为空,因此无法对其进行解析。解决方案是检查该特定值,如

但如果我输入foobar,这不会阻止异常。因此,更安全的解决方案是捕获异常。如果这不是一个数值,我让您找到正确的值管理解决方案

Integer number;
try{
    number = Integer.valueOf(s);
} catch(NumberFormatException nfe){
    number = null; //Just an example of default value
    // If you don't manage it with a default value, you need to throw an exception to stop here.
}
...

一个可能对你有帮助的例子

boolean validInput = true;
String theString = String.valueOf(textView3.getText());
  if (!theString.isEmpty()){ // if there is an input
        for(int i = 0; i < theString.length(); i++){ // check for any non-digit
            char c = theString.charAt(i);
            if((c<48 || c>57)){ // if any non-digit found (ASCII chars values for [0-9] are [48-57]
                validInput=false;
            }
        }
  }
  else {validInput=false;}

    if (validInput){// if the input consists of integers only and it's not empty
        int x = Integer.parseInt(theString); // it's safe, take the input
            // do some work
    }

好的,我找到了一个更好的方法来处理这个问题。启动时,值为null。因此,我创建了另一个方法,在活动初始化后,通过单击按钮来处理edittext字段。它可以工作

private void diffe() {
        String theString = String.valueOf(textView3.getText().toString().trim());
        String theStringe = String.valueOf(textView5.getText().toString().trim());
        int e = Integer.valueOf(theString);
        int s = Integer.valueOf(theStringe);
        int p = s - e ;
        textView2.setText(Integer.toString(p));
    }

只是一个提示,EditText->String->int。现在,您需要知道什么字符串实际代表一个数字,正如异常告诉您的那样。不等同于0我想说的是,为了节省空间,可以只声明x而不将其实例化为null,而是添加一个将x设置为null的else条件至少使用String.equals进行正确的比较。但是String.isEmpty可以。最好是String.trim.i空的。这只是一个例子,x的最佳声明位置取决于代码的其余部分,可能在if体或其他条件之外不需要。如果您自己将字符串设置为整数,则可能不需要捕获异常(如果用户可以对其进行编辑),实际上这将是最好的。请注意,对于我们的本地应用程序来说,这项工作应该更为通用。您可以简单地使用forchar c:theString.toCharArray{…};没错,这就是我提到ASCII的原因。真的!我没注意到