简体   繁体   中英

whenever i perform any operations like add sub equals etc in andriod studio EditText box , my app crashes

I have been trying to make a simple calculator on Android studio . It shows the calculations perfectly fine. but whenever I try to press equals or plus sub or minus operation when the EditText box is empty, my app always crashes.
I tried different ways but it didn't help.
Is there any way that I can do it and stop my app from crashing?

Here's my java code

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;
                      }
                  }

              }

          });

  }
} 

You say it crashes when the EditText box is empty, so most likely, what is happening is that when you do

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

result.getText() returns "" , or you end up doing

Float.parseFloat("");

which result in java.lang.NumberFormatException: empty String

Try replacing

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

with

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

NOTE: Also, as you use it several times, you can make a method for it

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

    return result;
}

and then replace everywhere with val1 = getResult();

as above code when get data from EditText use edit.getText().toString() and for Parsing it always wrap it with try/catch block as EditText it is initially empty

some hints about the code
- here if (result == null) result.setText(""); result is always not null .

so for better solution always use try/catch when parsing EditText.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM