Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对EditText中的数据执行数值计算时出错_Java_Android - Fatal编程技术网

Java 对EditText中的数据执行数值计算时出错

Java 对EditText中的数据执行数值计算时出错,java,android,Java,Android,我刚接触安卓系统,遇到了一个令人困惑的问题。我试图对在一个或多个EditText字段中输入的某些文本执行一些数值计算(每个字段都有相应的算法来确定结果),然后将结果/结果存储在与EditText关联的一些文本视图中。EditText1与TextView1关联;EditText2与TextView2关联。在我的程序中,将有十个EditText,每个EditText都有一个关联的TextView。所有或没有EditText中可能包含一些数字数据。按下按钮(使用andriod:onClick=“but

我刚接触安卓系统,遇到了一个令人困惑的问题。我试图对在一个或多个EditText字段中输入的某些文本执行一些数值计算(每个字段都有相应的算法来确定结果),然后将结果/结果存储在与EditText关联的一些文本视图中。EditText1与TextView1关联;EditText2与TextView2关联。在我的程序中,将有十个EditText,每个EditText都有一个关联的TextView。所有或没有EditText中可能包含一些数字数据。按下按钮(使用andriod:onClick=“buttonPressed”)后将进行计算,此时,任何具有数字输入的EditText都应将其数据拉出并进行计算(使用特定于该数据段的公式),结果存储在EditText的特定文本视图中

当我只使用一个EditText和一个TextView时,一切都很好。EditText中的数据被正确解析、计算,结果存储在TextView中。下面是这种情况下的代码:

public void buttonPressed(View view)
{
    if (editText1.getText() != null)
        textView1.setText(Double.toString(Double.valueOf(editText1.getText().toString())/12));
}   
但是,如果我尝试扩展此代码并使用另一个EditText和TextView,如下所示:

public void buttonPressed(View view)
{
    if (editText1.getText() != null)
        textView1.setText(Double.toString(Double.valueOf(editText1.getText().toString())/12));
    if (editText2.getText() != null)
        textView2.setText(Double.toString(Double.valueOf(editText2.getText().toString())/107));
}   
我发现一些错误,似乎表明存在解析问题。以下是LogCat输出(我不擅长解释):

我不明白为什么我用来对EditText中的数据执行计算的解析方法(我不确定如何执行此操作,但我通过多次尝试和错误发现这种方法)只适用于一个字段,而不适用于两个字段。在过去的几个小时里,我尝试了很多其他的方法,但都没有找到答案

非常感谢您的帮助


编辑:我忘了说我所有的编辑文本都有android:numeric=“decimal”(我知道这是不推荐的,但我在这里使用它),这样我就不会有任何非数字的输入。

您的一个字段包含空字符串,而不是null。你需要像这样扩展条件

if (editText1.getText() != null)
更像

if (editText1.getText() != null && !editText1.getText().toString().equals(""))
捕获空字符串大小写。还有两种较短的书写方法。您可能希望了解Apache的
StringUtils
类,该类具有名为
isEmpty
isBlank
的方法,这些方法可能对您有所帮助


您可能还想考虑,如果其他无效值进入其中一个字段,该怎么办。

您只需要在转换过程中使用if子句,以确保字符串不是空的

尝试将空字符串转换为双精度字符串时失败

更改此行:

if(editText1.getText() != null){
致:

现在,如果用户在EditText中输入一个非数字,您仍然会遇到问题

在整个乱七八糟的地方放一个try/catch语句,以捕获许多格式的概念


我只是添加了这个语句,因为如果语句需要另一个字符版本,sof不允许使用一个字符版本!(不)而且

您的方法不考虑空格。在检查字符串是否为空之前,应该修剪字符串。另外,Android内置了TextUtils来完成与StringUtils相同的工作。“空格”问题就是我提到的
isBlank
的原因。我永远不会用
trim
来写所有这些-我总是使用
StringUtils
方法之一。谢谢你关于
TextUtils
的注释;我不知道Android有这个功能。谢谢!我希望我能接受这两个答案,因为他们都是正确的,我从他们身上学到了一些东西。然而,我的错误源于这样一个事实,即我错误地认为null和“”是同一件事(因此我没有测试“”),但从您的回答中,我了解到“”是空字符串,这是不同的。再次感谢所有帮助过我的人!你可以从这两个问题的答案中学到一些东西——发帖的人对空和空的区别感到困惑。这是关于堆栈溢出的一个非常常见的主题。您可以简单地捕获NFE,如果有,它将解释为空以及不正确的格式。我非常确信editText1.getText()永远不会返回null。getText返回可编辑的。如果只有数字是EditText的合法输入,我建议在EditText上设置android:inputType=“number”属性。
if(editText1.getText() != null){
if(editText1.getText() != null && !TextUtils.isEmpty(editText1.getText().toString().trim())){