Odie Odie - 4 months ago 14
Java Question

When I press a buton and the EditTexts are empty it crashes

I am making a simple calculator as my first made by me app and I have two

EditTexts
and if I press any of the 4 calculation buttons the app crashes, I have set a toast message to display if EditText1 & EditText2 are empty and if not do calculation according to button pressed...how can I prevent it from crashing?
Here's my
MainActivity.java
:

public class MainActivity extends Activity {
EditText number1text;
EditText number2text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
number1text = (EditText) findViewById(R.id.num1text);
number2text = (EditText) findViewById(R.id.num2text);
}

public void calcadd(View v) { // here
if (number1text.getText().toString().isEmpty() || number2text.getText().toString().isEmpty()) {
Toast msg = Toast.makeText(getBaseContext(),
"You Should Put Numbers To Do Calculation",
Toast.LENGTH_LONG);
msg.show();
}
else{

}
Integer num1text = Integer.parseInt(number1text.getText().toString());
Integer num2text = Integer.parseInt(number2text.getText().toString());
Integer ans = num1text + num2text;

TextView answer = (TextView) findViewById(R.id.ans);
answer.setText("Answer:" + ans.toString());
}

public void calcminus(View v) { // here
if (number1text.getText().toString().isEmpty() || number2text.getText().toString().isEmpty()) {
Toast msg = Toast.makeText(getBaseContext(),
"You Should Put Numbers To Do Calculation",
Toast.LENGTH_LONG);
msg.show();
}
else{

}
Integer num1text = Integer.parseInt(number1text.getText().toString());
Integer num2text = Integer.parseInt(number2text.getText().toString());
Integer ans = num1text - num2text;

TextView answer = (TextView) findViewById(R.id.ans);
answer.setText("Answer:" + ans.toString());
}

public void calcdivide(View v) { // here
if (number1text.getText().toString().isEmpty() || number2text.getText().toString().isEmpty()) {
Toast msg = Toast.makeText(getBaseContext(),
"You Should Put Numbers To Do Calculation",
Toast.LENGTH_LONG);
msg.show();
}
else{

}
Integer num1text = Integer.parseInt(number1text.getText().toString());
Integer num2text = Integer.parseInt(number2text.getText().toString());
Integer ans = num1text / num2text;

TextView answer = (TextView) findViewById(R.id.ans);
answer.setText("Answer:" + ans.toString());
}

public void calcmultiply(View v) { // here
if (number1text.getText().toString().isEmpty() || number2text.getText().toString().isEmpty()) {
Toast msg = Toast.makeText(getBaseContext(),
"You Should Put Numbers To Do Calculation",
Toast.LENGTH_LONG);
msg.show();
}
else{

}
Integer num1text = Integer.parseInt(number1text.getText().toString());
Integer num2text = Integer.parseInt(number2text.getText().toString());
Integer ans = num1text * num2text;

TextView answer = (TextView) findViewById(R.id.ans);
answer.setText("Answer:" + ans.toString());
}




@Override
public boolean onCreateOptionsMenu(Menu menu) { // here
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}


and this is my activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
android:id="@+id/num1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="@string/num1"
android:textAppearance="?android:attr/textAppearanceMedium"
/>

<EditText
android:id="@+id/num1text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/num1"
android:layout_below="@+id/num1"
android:ems="10"
android:inputType="number"
>

<requestFocus />
</EditText>

<TextView
android:id="@+id/num2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/num1text"
android:layout_below="@+id/num1text"
android:text="@string/num2"
android:textAppearance="?android:attr/textAppearanceMedium"
/>

<EditText
android:id="@+id/num2text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/num2"
android:layout_below="@+id/num2"
android:ems="10"
android:inputType="number"
/>

<TextView
android:id="@+id/ans"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/num2text"
android:layout_below="@+id/num2text"
android:layout_marginTop="52dp"
android:text="@string/anstxt"
android:textAppearance="?android:attr/textAppearanceMedium"
/>

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/num2text"
android:layout_below="@+id/num2text"
android:text="@string/btnadd"
android:onClick="calcadd"/>

<Button
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button1"
android:layout_alignBottom="@+id/button1"
android:layout_toRightOf="@+id/button1"
android:text="@string/btnminus"
android:onClick="calcminus"/>

<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/Button01"
android:layout_alignBottom="@+id/Button01"
android:layout_toRightOf="@+id/Button01"
android:text="@string/btnmultiply"
android:onClick="calcmultiply"/>

<Button
android:id="@+id/Button02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button2"
android:layout_alignBottom="@+id/button2"
android:layout_toRightOf="@+id/button2"
android:text="@string/btndivide"
android:onClick="calcdivide"/>

</RelativeLayout>

Answer

In all four of your if structures where you test for the EditTexts being empty, change this:

else{

}
Integer num1text = Integer.parseInt(number1text.getText().toString());
Integer num2text = Integer.parseInt(number2text.getText().toString());
Integer ans = num1text + num2text; // +, -, * or / depending

TextView answer = (TextView) findViewById(R.id.ans);
answer.setText("Answer:" + ans.toString());

to this (the code needs to be in the else block):

else{
    Integer num1text = Integer.parseInt(number1text.getText().toString());
    Integer num2text = Integer.parseInt(number2text.getText().toString());
    Integer ans = num1text + num2text;

    TextView answer = (TextView) findViewById(R.id.ans);
    answer.setText("Answer:" + ans.toString());
}

also, in each of your Toasts, change getBaseContext() to getApplicationContext().