Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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 为什么这个简单的android应用程序是递归的?_Java_Android_Recursion_Android Edittext_Textview - Fatal编程技术网

Java 为什么这个简单的android应用程序是递归的?

Java 为什么这个简单的android应用程序是递归的?,java,android,recursion,android-edittext,textview,Java,Android,Recursion,Android Edittext,Textview,这里有一个新用户,而且对Java相当陌生。运行此命令时,它会崩溃,并出现java.lang.stackoverflow错误。我相当肯定它是递归的,但我不知道为什么。我尝试过单步调试,但出现了一个错误,它找不到类文件。代码如下: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

这里有一个新用户,而且对Java相当陌生。运行此命令时,它会崩溃,并出现java.lang.stackoverflow错误。我相当肯定它是递归的,但我不知道为什么。我尝试过单步调试,但出现了一个错误,它找不到类文件。代码如下:

 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    newPrice.addTextChangedListener(tradeWatch);
    tradeIn.addTextChangedListener(tradeWatch);
    acc.addTextChangedListener(tradeWatch);
    tradeDif.addTextChangedListener(tradeWatch);

}

TextWatcher tradeWatch = new TextWatcher() {

    @Override
    public void afterTextChanged(Editable s) {
        calcTrade();

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        // TODO Auto-generated method stub

    }

};

private void calcTrade() {
Editable eValue1 = newPrice.getText(), eValue2 = tradeIn.getText(), eValue3 = acc.getText();
Double value1 = 0.0, value2 = 0.0, value3 = 0.0, result = 0.0;

if (eValue1 != null)
    value1 = toDouble(eValue1);
if (eValue2 != null)
    value2 = toDouble(eValue2);
if (eValue3 != null)
    value3 = toDouble(eValue3);
if (value1 != null && value2 != null && value3 != null)
    result = value1 - (value2 + value3);
    tradeDif.setText(result.toString());

}
private double toDouble(final Editable editable) {
    final String content = editable.toString();
    if (content.isEmpty()) {
        return 0;
    }
    return Double.parseDouble(content);
}

public void nextPage(View v) {
    Intent i=new Intent(this, Activity2.class);
    startActivity(i);
}


}
问题是线路:

tradeDif.setText(result.toString());
您更改文本,它会导致调用

afterTextChanged(Editable s) 
一次又一次

简单解
  • 删除侦听器
  • 更改值
  • 添加侦听器
  • 问题是线路:

    tradeDif.setText(result.toString());
    
    您更改文本,它会导致调用

    afterTextChanged(Editable s) 
    
    一次又一次

    简单解
  • 删除侦听器
  • 更改值
  • 添加侦听器

  • 问题是您的
    tradeDif
    正在使用您的
    tradeWatch
    TextWatcher。在该TextWatcher的
    PostTextChanged()
    ,您调用
    calcTrade()
    ,它调用
    tradeDif.setText(result.toString())


    安卓在
    tradeDif
    上完成文本设置后,它将再次在您的TextWatcher上调用
    afterTextChanged()
    ,并将继续这样做,直到您停止设置
    tradeDif
    的文本。

    问题是您的
    tradeDif
    正在使用您的
    tradeWatch
    文本Watcher。在该TextWatcher的
    PostTextChanged()
    ,您调用
    calcTrade()
    ,它调用
    tradeDif.setText(result.toString())


    Android在
    tradeDif
    上完成文本设置后,它将再次调用TextWatcher上的
    afterTextChanged()
    ,并将继续这样做,直到您停止设置
    tradeDif
    的文本。

    您的
    TextWatcher
    调用
    calcTrade()
    ,设置文本,调用
    TextWatcher
    。为什么
    tradeDif.addTextChangedListener(tradeWatch)
    ?您的
    TextWatcher
    调用
    calcTrade()
    ,设置文本,调用
    TextWatcher
    。为什么
    tradeDif.addTextChangedListener(tradeWatch)?如何修复此问题?问题是editText“tradeDif”还将进一步用于更多类似的计算。例如,这部分计算差异,但我也希望能够使用“tradeDif”来计算超出这一点的差异,使用类似的技术。如果不了解应用程序的工作原理以及用户使用应用程序的一般流程,很难说。一种解决方案是将
    tradeDif
    设置为不可编辑的文本视图,而不是EditText,并可能在以后使用不同的字段。或者,在您再次尝试计算和设置
    tradeDif
    之前,您可以输入一个标志,例如
    hasculateddif
    。谢谢您的时间。虽然这是一个愚蠢的问题,我本应该发现的,但我希望我没有被否决。我希望能够为愿意提供帮助的人添加代表。如果我有足够的代表给其他人提供代表,我将返回并添加代表。我如何解决这个问题?问题是editText“tradeDif”还将进一步用于更多类似的计算。例如,这部分计算差异,但我也希望能够使用“tradeDif”来计算超出这一点的差异,使用类似的技术。如果不了解应用程序的工作原理以及用户使用应用程序的一般流程,很难说。一种解决方案是将
    tradeDif
    设置为不可编辑的文本视图,而不是EditText,并可能在以后使用不同的字段。或者,在您再次尝试计算和设置
    tradeDif
    之前,您可以输入一个标志,例如
    hasculateddif
    。谢谢您的时间。虽然这是一个愚蠢的问题,我本应该发现的,但我希望我没有被否决。我希望能够为愿意提供帮助的人添加代表。如果我有足够的代表给其他人,我会返回并添加代表。