0

This probably the most asked question, but it very difficult to find some answers. First I am newbie. I want to make simple quadratic equation formula app. That would allow to to find solution fast. I bump with the problem that Android Studio say Code is okey, but device crashes after opening app.

private Button   mButton;
private EditText mEdit;
private EditText mEdit1;
private EditText mEdit2;
private TextView mText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mButton = (Button)findViewById(R.id.button2);
    mEdit   = (EditText)findViewById(R.id.editText);
    mEdit1   = (EditText)findViewById(R.id.editText2);
    mEdit2   = (EditText)findViewById(R.id.editText3);
    mText = (TextView)findViewById(R.id.textView4);

    //Int definēšana
    final int i1 = Integer.parseInt(mEdit.getText().toString());
    final int i2 = Integer.parseInt(mEdit1.getText().toString());
    final int i3 = Integer.parseInt(mEdit2.getText().toString());

    mButton.setOnClickListener(
            new View.OnClickListener()
            {
                public void onClick(View view)
                {
                    //Mainīgo ievade
                    int a = i1;
                    //Pārbauda vai a nav nulle
                    if (a == 0){
                        mText.setText(String.valueOf("Nav kvadrātvienādojums"));
                    } else {
                        int b = i2;
                        int c = i3;

                        //Diskriminanta aprēķināšana
                        double diskr = (b*b)-4*a*c;
                        //Kvadrātsakne no diskriminanta
                        double sd = (double) Math.sqrt(diskr);
                        //Sakņu aprēķināšana
                        double x1 = (-b+sd)/(2*a);
                        double x2 = (-b-sd)/(2*a);

                        //Rezultāta izvade
                        if (diskr < 0){
                            mText.setText(String.valueOf("Kvadrātvienādojumam nav sakņu"));
                        } else if (diskr == 0){
                            mText.setText(String.valueOf("Kvadrātvienādojumam ir viena sakne: " + x1));
                        } else {
                            mText.setText(String.valueOf("Kvadrātvienādojuma saknes: " + x1 + " un " + x2));
                        }
                    }
                }
            });
} 

And logcat that may help detect a problem

FATAL EXCEPTION: main
Process: com.homemade.prtbust.kvadratvienadojums, PID: 4552
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.homem`enter code here`ade.prtbust.kvadratvienadojums/com.homemade.prtbust.kvadratvienadojums.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3133)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3243)
at android.app.ActivityThread.access$1000(ActivityThread.java:218)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1718)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6917)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
    at com.homemade.prtbust.kvadratvienadojums.MainActivity.onCreate(MainActivity.java:38)
    at android.app.Activity.performCreate(Activity.java:6609)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3086)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3243)
    at android.app.ActivityThread.access$1000(ActivityThread.java:218)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1718)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:145)
    at android.app.ActivityThread.main(ActivityThread.java:6917)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 
Farshad
  • 3,074
  • 2
  • 30
  • 44

3 Answers3

1

I think you miss

setContentView(R.layout.activity_main); " activity_name is the name of layout where is the edit text"

setContentView must be called before using findViewById

Rao
  • 20,781
  • 11
  • 57
  • 77
Jerassi Ferrer
  • 284
  • 2
  • 8
0

try write this code ofter you set the content view for the activity

    //load all the views from the xml file
    setContentView(R.layout.activity_main);

mButton = (Button)findViewById(R.id.button2);
mEdit   = (EditText)findViewById(R.id.editText);
mEdit1   = (EditText)findViewById(R.id.editText2);
mEdit2   = (EditText)findViewById(R.id.editText3);
mText = (TextView)findViewById(R.id.textView4);

//Int definēšana
final int i1 = Integer.parseInt(mEdit.getText().toString());
final int i2 = Integer.parseInt(mEdit1.getText().toString());
...

    mButton.setOnClickListener(/*your code here*/);

you cant get the text from EditText before the EditText view created. if this not solved youre problem, try write your i1/2/3 variables at onStart

@Override
protected void onStart() {
    super.onStart();

    final int i1 = Integer.parseInt(mEdit.getText().toString());
    final int i2 = Integer.parseInt(mEdit1.getText().toString());
    final int i3 = Integer.parseInt(mEdit2.getText().toString());
}
0

You are not assigning any layout to the Activity, therefore all your EditTexts, Button and TextView are not present, when you try to access any of them by code the program will crash.

Second, you should read the values for your variables when clicking the button, not in the oncreate, because that will cause you another error given that you'll try to parse something that is an empty string (unless you have set a value in the android:text tag in the xml). I also wouldn't declare them as final (because you won't be able to modify them later.

Try using this code:

private Button   mButton;
private EditText mEdit;
private EditText mEdit1;
private EditText mEdit2;
private TextView mText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mButton = (Button)findViewById(R.id.button2);
    mEdit   = (EditText)findViewById(R.id.editText);
    mEdit1   = (EditText)findViewById(R.id.editText2);
    mEdit2   = (EditText)findViewById(R.id.editText3);
    mText = (TextView)findViewById(R.id.textView4);

    mButton.setOnClickListener(
            new View.OnClickListener()
            {
                public void onClick(View view)
                {
                    //Int definēšana
                    int i1 = Integer.parseInt(mEdit.getText().toString());
                    int i2 = Integer.parseInt(mEdit1.getText().toString());
                    int i3 = Integer.parseInt(mEdit2.getText().toString());

                    //Mainīgo ievade
                    int a = i1;
                    //Pārbauda vai a nav nulle
                    if (a == 0){
                        mText.setText(String.valueOf("Nav kvadrātvienādojums"));
                    } else {
                        int b = i2;
                        int c = i3;

                        //Diskriminanta aprēķināšana
                        double diskr = (b*b)-4*a*c;
                        //Kvadrātsakne no diskriminanta
                        double sd = (double) Math.sqrt(diskr);
                        //Sakņu aprēķināšana
                        double x1 = (-b+sd)/(2*a);
                        double x2 = (-b-sd)/(2*a);

                        //Rezultāta izvade
                        if (diskr < 0){
                            mText.setText(String.valueOf("Kvadrātvienādojumam nav sakņu"));
                        } else if (diskr == 0){
                            mText.setText(String.valueOf("Kvadrātvienādojumam ir viena sakne: " + x1));
                        } else {
                            mText.setText(String.valueOf("Kvadrātvienādojuma saknes: " + x1 + " un " + x2));
                        }
                    }
                }
            });
} 
Isaac Urbina
  • 1,295
  • 11
  • 21