Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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
Android应用程序因java.lang.StackOverflower错误而失败_Java_Android_Stack Overflow - Fatal编程技术网

Android应用程序因java.lang.StackOverflower错误而失败

Android应用程序因java.lang.StackOverflower错误而失败,java,android,stack-overflow,Java,Android,Stack Overflow,我正在制作一个android程序,由于stackoverflow错误而失败。我已附上我的代码。我正在使用android studio。我相信它之所以循环是因为addTextChangedListener,但我不明白它为什么这样做 我的代码: rb1 = (RadioButton) findViewById(R.id.radioButtonCFM); rb2 = (RadioButton) findViewById(R.id.radioButtonAC); rb1.set

我正在制作一个android程序,由于stackoverflow错误而失败。我已附上我的代码。我正在使用android studio。我相信它之所以循环是因为addTextChangedListener,但我不明白它为什么这样做

我的代码:

    rb1 = (RadioButton) findViewById(R.id.radioButtonCFM);
    rb2 = (RadioButton) findViewById(R.id.radioButtonAC);

    rb1.setOnClickListener(new RadioGroup.OnClickListener() {
         public void onClick(View v) {
             EditText e1 = (EditText) findViewById(R.id.editText);
             String sUsername1 = e1.getText().toString();
             if (TextUtils.isEmpty(sUsername1)) {
                 e1.setError("The item cannot be empty.");
                 return;
             }

             EditText e2 = (EditText) findViewById(R.id.editText2);
             String sUsername2 = e2.getText().toString();
             if (TextUtils.isEmpty(sUsername2)) {
                 e2.setError("The item cannot be empty.");
                 return;
             }

             EditText e3 = (EditText) findViewById(R.id.editText3);
             String sUsername3 = e3.getText().toString();
             if (TextUtils.isEmpty(sUsername3)) {
                 e3.setError("The item cannot be empty.");
                 return;
             }

             e1.addTextChangedListener(new TextWatcher() {

                 public void afterTextChanged(Editable s) {
                 }

                 public void beforeTextChanged(CharSequence s, int start,
                                               int count, int after) {
                 }

                 public void onTextChanged(CharSequence s, int start,
                                           int before, int count) {
                     EditText e1 = (EditText)findViewById(R.id.editText);
                     EditText e2 = (EditText)findViewById(R.id.editText2);
                     EditText e3 = (EditText)findViewById(R.id.editText3);
                     volume = Double.parseDouble(e1.getText().toString());
                     cfm = Double.parseDouble(e2.getText().toString());
                     ac = Double.parseDouble(e3.getText().toString());
                     TextView t1 = (TextView) findViewById(R.id.editText3);
                     volume = Double.parseDouble(e1.getText().toString());
                     cfm = Double.parseDouble(e2.getText().toString());
                     ac = cfm * 60 / volume;
                     t1.setText(Double.toString((double) Math.round(ac * 100000) / 100000));
                 }
             });


             e2.addTextChangedListener(new TextWatcher() {

                 public void afterTextChanged(Editable s) {
                 }

                 public void beforeTextChanged(CharSequence s, int start,
                                               int count, int after) {
                 }

                 public void onTextChanged(CharSequence s, int start,
                                           int before, int count) {
                     EditText e1 = (EditText)findViewById(R.id.editText);
                     EditText e2 = (EditText)findViewById(R.id.editText2);
                     EditText e3 = (EditText)findViewById(R.id.editText3);
                     volume = Double.parseDouble(e1.getText().toString());
                     cfm = Double.parseDouble(e2.getText().toString());
                     ac = Double.parseDouble(e3.getText().toString());
                     TextView t1 = (TextView) findViewById(R.id.editText3);
                     volume = Double.parseDouble(e1.getText().toString());
                     cfm = Double.parseDouble(e2.getText().toString());
                     ac = cfm * 60 / volume;
                     t1.setText(Double.toString((double) Math.round(ac * 100000) / 100000));
                 }
             });

         }});

     rb2.setOnClickListener(new RadioGroup.OnClickListener() {
         public void onClick(View v) {
             EditText e1 = (EditText)findViewById(R.id.editText);
             String sUsername1 = e1.getText().toString();
             if(TextUtils.isEmpty(sUsername1)) {
                 e1.setError("The item cannot be empty.");
                 return;
             }

             EditText e2 = (EditText)findViewById(R.id.editText2);
             String sUsername2 = e2.getText().toString();
             if(TextUtils.isEmpty(sUsername2)) {
                 e2.setError("The item cannot be empty.");
                 return;
             }

             EditText e3 = (EditText)findViewById(R.id.editText3);
             String sUsername3 = e3.getText().toString();
             if(TextUtils.isEmpty(sUsername3)) {
                 e3.setError("The item cannot be empty.");
                 return;
             }

             e1.addTextChangedListener(new TextWatcher() {

                 public void afterTextChanged(Editable s) {
                 }

                 public void beforeTextChanged(CharSequence s, int start,
                                               int count, int after) {
                 }

                 public void onTextChanged(CharSequence s, int start,
                                           int before, int count) {
                     EditText e1 = (EditText)findViewById(R.id.editText);
                     EditText e2 = (EditText)findViewById(R.id.editText2);
                     EditText e3 = (EditText)findViewById(R.id.editText3);
                     volume = Double.parseDouble(e1.getText().toString());
                     cfm = Double.parseDouble(e2.getText().toString());
                     ac = Double.parseDouble(e3.getText().toString());

                     TextView t2 = (TextView)findViewById(R.id.editText2);
                     volume = Double.parseDouble(e1.getText().toString());
                     ac = Double.parseDouble(e3.getText().toString());
                     cfm = ac * volume / 60;
                     t2.setText(Double.toString((double) Math.round(cfm * 100000) / 100000));
                 }
             });

             e3.addTextChangedListener(new TextWatcher() {

                 public void afterTextChanged(Editable s) {
                 }

                 public void beforeTextChanged(CharSequence s, int start,
                                               int count, int after) {
                 }

                 public void onTextChanged(CharSequence s, int start,
                                           int before, int count) {
                     EditText e1 = (EditText)findViewById(R.id.editText);
                     EditText e2 = (EditText)findViewById(R.id.editText2);
                     EditText e3 = (EditText)findViewById(R.id.editText3);
                     volume = Double.parseDouble(e1.getText().toString());
                     cfm = Double.parseDouble(e2.getText().toString());
                     ac = Double.parseDouble(e3.getText().toString());

                     TextView t2 = (TextView)findViewById(R.id.editText2);
                     volume = Double.parseDouble(e1.getText().toString());
                     ac = Double.parseDouble(e3.getText().toString());
                     cfm = ac * volume / 60;
                     t2.setText(Double.toString((double) Math.round(cfm * 100000) / 100000));
                 }
             });

         }
     });
     }

监视
R.id.editText3
输入的TextWatcher正在修改
R.id.editText2
的文本,而
R.id.editText3
的文本又在修改。通过这种方式,您将获得对
onTextChanged(…)

的无限调用,请尝试在您的活动中添加以下行:

@Override

public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if ((keyCode == KeyEvent.KEYCODE_BACK))
        {

            finish();

        }
        return super.onKeyDown(keyCode, event);
    }

您正在重复调用findViewById()。只需创建所有视图字段,并在setContentView()之后的onCreate()中“查找”它们

我注意到你打电话来了

TextView t1 = (TextView) findViewById(R.id.edittext3);

不需要有指向同一视图的重复指针。简化代码,确保所有变量都指向正确的目标,并且TextWatcher不会自行触发。

使用LogCat检查Java堆栈跟踪,以查看无限递归的确切位置:我尝试过检查它,可以看出它在重复。但不幸的是,我不太明白。你怎么把日志贴在这里?太长了。我复制并粘贴到我的主要活动中。但是,它没有解决java.lang.StackOverflower错误。这是怎么回事?为什么你不把它链接到texbox?它似乎没什么作用,但我有rb1.setOnClickListener和rb2.setOnClickListener,它们将侦听器分开。它假设在单击rb1.setOnClickListener时基于R.id.editText1和R.id.editText2更改R.id.editText3。当单击rb2.setOnClickListener时,它假设根据R.id.editText1和R.id.editText3更改R.id.editText2。那么,即使单击了rb1.setOnClickListener,它仍然在侦听R.id.editText3吗?我该如何避开这件事,让它不听?