首页 > 解决方案 > 每当我在 andriod studio EditText 框中执行任何操作(如添加 sub equals 等)时,我的应用程序都会崩溃

问题描述

我一直在尝试做一个简单calculatorAndroid studio. 它显示计算非常好。但是每当我在框为空时尝试press equalsplus sub操作minus时,我的应用程序总是崩溃。 我尝试了不同的方法,但没有帮助。 有什么办法可以做到并阻止我的应用程序崩溃?EditText

这是我的java代码

package com.example.mathcalculator;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {

  Button button0,button1,button2,button3,button4,button5,button6,button7,button8,button9,buttonClear,buttonMul,buttonSub,buttonAdd,buttonDec,buttonEqual,buttonDiv;
  float val1,val2;
  EditText result;
  boolean mAdditon,msubtraction,mMultiplication, mDivision;


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

      button0 = (Button) findViewById(R.id.button0);
      button1 = (Button) findViewById(R.id.button1);
      button2 = (Button) findViewById(R.id.button2);
      button3 = (Button) findViewById(R.id.button3);
      button4 = (Button) findViewById(R.id.button4);
      button5 = (Button) findViewById(R.id.button5);
      button6 = (Button) findViewById(R.id.button6);
      button7 = (Button) findViewById(R.id.button7);
      button8 = (Button) findViewById(R.id.button8);
      button9 = (Button) findViewById(R.id.button9);
      buttonAdd = (Button) findViewById(R.id.buttonAdd);
      buttonMul = (Button) findViewById(R.id.buttonMul);
      buttonDiv = (Button) findViewById(R.id.buttonDiv);
      buttonClear = (Button) findViewById(R.id.buttonClear);
      buttonEqual = (Button) findViewById(R.id.buttonEqual);
      buttonDec = (Button) findViewById(R.id.buttonDec);
      buttonSub = (Button) findViewById(R.id.buttonSub);
      result = (EditText) findViewById(R.id.result);

      button0.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              result.setText(result.getText()+"0");
          }
      });

      button1.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              result.setText(result.getText()+"1");
          }
      });

      button2.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              result.setText(result.getText()+"2");
          }
      });

      button3.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              result.setText(result.getText()+"3");
          }
      });
      button4.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              result.setText(result.getText()+"4");
          }
      });
      button5.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              result.setText(result.getText()+"5");
          }
      });
      button6.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              result.setText(result.getText()+"6");
          }
      });
      button7.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              result.setText(result.getText()+"7");
          }
      });
      button8.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              result.setText(result.getText()+"8");
          }
      });
      button9.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              result.setText(result.getText()+"9");
          }
      });
      buttonDec.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              result.setText(result.getText()+".");
          }
      });

      buttonAdd.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {

              if (result == null)
              {
                 result.setText("");
              }
              else
              {
                  val1 =Float.parseFloat(result.getText()+"");
                  mAdditon=true;
                  result.setText(null);

              }
          }
      });

      buttonSub.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {

              {
                  val1=Float.parseFloat(result.getText()+"");
                  msubtraction=true;
                  result.setText(null);
              }
          }
      });

      buttonDiv.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {

              {
                  val1=Float.parseFloat(result.getText()+"");
                  mDivision=true;
                  result.setText(null);
              }
          }
      });

      buttonMul.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {

              {
                  val1=Float.parseFloat(result.getText()+"");
                  mMultiplication = true;
                  result.setText(null);
              }
          }
      });

      buttonClear.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              result.setText("");
          }
      });



          buttonEqual.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {

                  val2 = Float.parseFloat(result.getText() + "");


                  if (mAdditon == true) {

                      result.setText(val1 + val2 + "");
                      mAdditon = false;

                  }
                  if (msubtraction == true) {
                      result.setText(val1 - val2 + "");
                      msubtraction = false;
                  }

                  if (mMultiplication == true) {
                      result.setText(val1 * val2 + "");
                      msubtraction = false;
                  }

                  if (mDivision == true) {
                      if (val2 == 0) {
                          result.setText("Can't Divide by Zero");
                          return;
                      } else {
                          result.setText(val1 / val2 + "");
                          msubtraction = false;
                      }
                  }

              }

          });

  }
} 

标签: javaandroid

解决方案


您说当 EditText 框为空时它会崩溃,所以很可能发生的事情是当您这样做时

Float.parseFloat(result.getText() + "");

result.getText()返回"",或者你最终会做

Float.parseFloat("");

这导致java.lang.NumberFormatException: empty String

尝试更换

val1=Float.parseFloat(result.getText()+"");

val1 = 0;
if(!result.getText().isEmpty())
   val1 = Float.parseFloat(result.getText());

注意: 另外,当你多次使用它时,你可以为它制作一个方法

private float getResult() {
    int result = 0;
    if(!result.getText().isEmpty())
        val1=Float.parseFloat(result.getText());

    return result;
}

然后在任何地方替换为val1 = getResult();


推荐阅读