user3286931
user3286931

Reputation:

FATAL EXCEPTION: main. (Runtime exception) . Android

I'm new to android. I just tried creating a simple app that performs basic mathematical operations (addition,subtraction,multiplication and division). When i try to run the code i get FATAL EXCEPTION: mainerror. I've gone through the other threads that had the same problem. I still couldn't figure out why i'm having this error.

The mainactivity.java file is package com.example.mathematicalopr;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

    Button add,sub,mul,div;
    TextView display2;
    EditText display,display1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        //int c=0;
        add = (Button) findViewById(R.id.bAdd);
        sub = (Button) findViewById(R.id.bSub);
        mul = (Button) findViewById(R.id.times);
        div = (Button) findViewById(R.id.divide);


        display = (EditText) findViewById(R.id.tvDisplay);
        String myFirstNum = display.getText().toString();
        final int a = Integer.parseInt(myFirstNum);
        display1 = (EditText) findViewById(R.id.tvDisplay1);
        String mySecondNum = display1.getText().toString();
        final int b = Integer.parseInt(mySecondNum);
        display2 = (TextView) findViewById(R.id.tvDisplay2);
        add.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                int c = a+b;
                display2.setText("Answer is"+c);
            }
        });
        sub.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                int c = a-b; 
                display2.setText("Answer is"+c);
            }
        });
            mul.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                int c = a*b; 
                display2.setText("Answer is"+c);
            }
        });
    div.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        int c = a/b; 
        display2.setText("Answer is"+c);
    }
        });
    }


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

    }

My activity_main.xml file is

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:orientation="vertical" >

    <EditText
    android:id="@+id/tvDisplay"
    android:layout_width="342dp"
    android:layout_height="wrap_content"
    android:inputType="number"
    android:text="@string/ref" />
    <EditText
    android:id="@+id/tvDisplay1"
    android:layout_width="342dp"
    android:layout_height="wrap_content"
    android:inputType="number"
    android:text="@string/ref1" />


    <Button
    android:id="@+id/bAdd"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/add" />

    <Button
    android:id="@+id/bSub"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/sub" />
    <Button
    android:id="@+id/times"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/times" />
    <Button
    android:id="@+id/divide"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/divide" />
   <TextView
    android:id="@+id/tvDisplay2"
    android:layout_width="342dp"
    android:layout_height="wrap_content"
    android:text="@string/ref2" />
    </LinearLayout>

My strings.xml file

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Mathematicalopr</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="ref">Enter first number</string>
    <string name="add">Add</string>
    <string name="sub">Subtract </string>
    <string name="times">Multiply</string>
    <string name="divide">divide</string>
    <string name="ref1">Enter second number</string>
    <string name="ref2">Answer is</string>

</resources>

Logcat:

02-08 10:50:43.962: W/Trace(2302): Unexpected value from nativeGetEnabledTags: 0
02-08 10:50:43.972: W/Trace(2302): Unexpected value from nativeGetEnabledTags: 0
02-08 10:50:43.972: W/Trace(2302): Unexpected value from nativeGetEnabledTags: 0
02-08 10:50:44.022: W/Trace(2302): Unexpected value from nativeGetEnabledTags: 0
02-08 10:50:44.022: W/Trace(2302): Unexpected value from nativeGetEnabledTags: 0
02-08 10:50:44.422: D/AndroidRuntime(2302): Shutting down VM
02-08 10:50:44.432: W/dalvikvm(2302): threadid=1: thread exiting with uncaught exception (group=0xb2ca6908)
02-08 10:50:44.462: E/AndroidRuntime(2302): FATAL EXCEPTION: main
02-08 10:50:44.462: E/AndroidRuntime(2302): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mathematicalopr/com.example.mathematicalopr.MainActivity}: java.lang.NumberFormatException: Invalid int: "Enter first number"
02-08 10:50:44.462: E/AndroidRuntime(2302):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at android.os.Looper.loop(Looper.java:137)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at android.app.ActivityThread.main(ActivityThread.java:5039)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at java.lang.reflect.Method.invokeNative(Native Method)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at java.lang.reflect.Method.invoke(Method.java:511)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at dalvik.system.NativeStart.main(Native Method)
02-08 10:50:44.462: E/AndroidRuntime(2302): Caused by: java.lang.NumberFormatException: Invalid int: "Enter first number"
02-08 10:50:44.462: E/AndroidRuntime(2302):     at java.lang.Integer.invalidInt(Integer.java:138)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at java.lang.Integer.parse(Integer.java:375)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at java.lang.Integer.parseInt(Integer.java:366)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at java.lang.Integer.parseInt(Integer.java:332)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at com.example.mathematicalopr.MainActivity.onCreate(MainActivity.java:30)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at android.app.Activity.performCreate(Activity.java:5104)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
02-08 10:50:44.462: E/AndroidRuntime(2302):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
02-08 10:50:44.462: E/AndroidRuntime(2302):     ... 11 more

Can i know why am i getting such an error? When i try to run this code on a virtual device the application closes unexpectedly. Thank you :)

Thank you everyone. Sorry apparently i don't have enough reputation to thank each one of you personally.

Upvotes: 2

Views: 626

Answers (4)

Lokesh
Lokesh

Reputation: 5378

Modified your code:

package com.example.sampleactivity;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

    Button add,sub,mul,div;
    TextView display2;
    EditText display,display1;
    int a,b,c;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        //int c=0;
        add = (Button) findViewById(R.id.bAdd);
        sub = (Button) findViewById(R.id.bSub);
        mul = (Button) findViewById(R.id.times);
        div = (Button) findViewById(R.id.divide);


        display = (EditText) findViewById(R.id.tvDisplay);

        display1 = (EditText) findViewById(R.id.tvDisplay1);

        display2 = (TextView) findViewById(R.id.tvDisplay2);
        add.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                getValues();
                c = a+b;
                display2.setText("Answer is"+c);
            }
        });
        sub.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                            getValues();
                c = a-b; 
                display2.setText("Answer is"+c);
            }
        });
        mul.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                            getValues();
                c = a*b; 
                display2.setText("Answer is"+c);
            }
        });
        div.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                            getValues();
                c = a/b; 
                display2.setText("Answer is"+c);
            }
        });
    }


    protected void getValues() {
        String myFirstNum = display.getText().toString();
        a= Integer.parseInt(myFirstNum);
        String mySecondNum = display1.getText().toString();
        b = Integer.parseInt(mySecondNum);
    }


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

}

xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/tvDisplay"
        android:layout_width="342dp"
        android:layout_height="wrap_content"
        android:hint="@string/ref"
        android:inputType="number" />

    <EditText
        android:id="@+id/tvDisplay1"
        android:layout_width="342dp"
        android:layout_height="wrap_content"
        android:hint="@string/ref1"
        android:inputType="number" />

    <Button
        android:id="@+id/bAdd"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="@string/add" />

    <Button
        android:id="@+id/bSub"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="@string/sub" />

    <Button
        android:id="@+id/times"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="@string/times" />

    <Button
        android:id="@+id/divide"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="@string/divide" />

    <TextView
        android:id="@+id/tvDisplay2"
        android:layout_width="342dp"
        android:layout_height="wrap_content"
        android:text="@string/ref2" />

</LinearLayout>

Upvotes: 0

Swapnil
Swapnil

Reputation: 654

    String myFirstNum = display.getText().toString();
    final int a = Integer.parseInt(myFirstNum);


    String mySecondNum = display1.getText().toString();
    final int b = Integer.parseInt(mySecondNum);

insert this code in your add button click event listener then you will get correct data

Upvotes: 1

Piyush
Piyush

Reputation: 18923

you must change

<EditText
 android:id="@+id/tvDisplay"
 android:layout_width="342dp"
 android:layout_height="wrap_content"
 android:inputType="number"
 android:hint="@string/ref" />

<EditText
 android:id="@+id/tvDisplay1"
 android:layout_width="342dp"
 android:layout_height="wrap_content"
 android:inputType="number"
 android:hint="@string/ref1" />

you must change from

android:text="@string/ref1"

to

android:hint="@string/ref1"

because on oncreate() method you are retrieving value of EditText. And in xml you have set string for it and after that you have parsed it in Integer. So you have got invalid int error. So just change it for every EditText.

Your are casting a string value to int, which results java.lang.NumberFormatException.

Upvotes: 1

Sarim Sidd
Sarim Sidd

Reputation: 2176

Your Logcat say it all,

Read this

Invalid int: "Enter first number"

Your are casting a string value to int, which results java.lang.NumberFormatException.

Upvotes: 1

Related Questions