Application closing (unfortunately MyApplication has stopped)

1

I'm doing the application below, Neri's course, however when I implement the code related to the button the application closes alone with error

  

unfortunately MyApplication has stopped

If you comment on the button code, the application runs. Here is the code:

MainActivity

package br.com.calculadora;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
import android.widget.*;

public class MainActivity extends ActionBarActivity {

EditText etNum1, etNum2, etResultado;
double num1, num2, resultado;
Button btSomar;


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

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment())
                .commit();
    }

    etNum1 = (EditText) findViewById(R.id.calculo_numero1);
    etNum2 = (EditText) findViewById(R.id.calculo_numero2);
    etResultado = (EditText) findViewById(R.id.calculo_resultado);

    btSomar = (Button) findViewById(R.id.botao_soma);

    btSomar.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            num1 = Double.parseDouble(etNum1.getText().toString());
            num2 = Double.parseDouble(etNum2.getText().toString());     
            resultado = num1 + num2;
            etResultado.setText(String.valueOf(resultado));


        }

    });

}


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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

/**
 * A placeholder fragment containing a simple view.
 */
public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        return rootView;
    }
}

}

fragment_main :

<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="br.com.calculadora.MainActivity$PlaceholderFragment" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/titulo" />

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView1"
    android:layout_below="@+id/textView1"
    android:layout_marginTop="18dp"
    android:text="@string/text1" />

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

<TextView
    android:id="@+id/textView2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/textView1"
    android:layout_below="@+id/calculo_numero1"
    android:text="@string/text2" />

<EditText
    android:id="@+id/calculo_numero2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/calculo_numero1"
    android:layout_below="@+id/textView2"
    android:ems="10"
    android:inputType="number" />

<TextView
    android:id="@+id/textView4"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/botao_soma"
    android:layout_centerVertical="true"
    android:text="@string/resultado" />

<EditText
    android:id="@+id/calculo_resultado"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/calculo_numero2"
    android:layout_below="@+id/textView4"
    android:ems="10"
    android:inputType="number" />

<Button
    android:id="@+id/botao_soma"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/calculo_numero2"
    android:layout_below="@+id/calculo_numero2"
    android:text="@string/button1" />

</RelativeLayout>

error log in LogCat :

03-18 16:18:54.339: D/AndroidRuntime(1879): Shutting down VM
03-18 16:18:54.339: W/dalvikvm(1879): threadid=1: thread exiting with uncaught exception    (group=0xb3a75ba8)
03-18 16:18:54.389: E/AndroidRuntime(1879): FATAL EXCEPTION: main
03-18 16:18:54.389: E/AndroidRuntime(1879): Process: br.com.calculadora, PID: 1879
03-18 16:18:54.389: E/AndroidRuntime(1879): java.lang.RuntimeException: Unable to start   activity ComponentInfo{br.com.calculadora/br.com.calculadora.MainActivity}: java.lang.NullPointerException
03-18 16:18:54.389: E/AndroidRuntime(1879):     at    android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
03-18 16:18:54.389: E/AndroidRuntime(1879):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
03-18 16:18:54.389: E/AndroidRuntime(1879):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
03-18 16:18:54.389: E/AndroidRuntime(1879):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
03-18 16:18:54.389: E/AndroidRuntime(1879):     at android.os.Handler.dispatchMessage(Handler.java:102)
03-18 16:18:54.389: E/AndroidRuntime(1879):     at android.os.Looper.loop(Looper.java:136)
03-18 16:18:54.389: E/AndroidRuntime(1879):     at android.app.ActivityThread.main(ActivityThread.java:5017)
03-18 16:18:54.389: E/AndroidRuntime(1879):     at java.lang.reflect.Method.invokeNative(Native Method)
03-18 16:18:54.389: E/AndroidRuntime(1879):     at java.lang.reflect.Method.invoke(Method.java:515)
03-18 16:18:54.389: E/AndroidRuntime(1879):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-18 16:18:54.389: E/AndroidRuntime(1879):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-18 16:18:54.389: E/AndroidRuntime(1879):     at dalvik.system.NativeStart.main(Native Method)
03-18 16:18:54.389: E/AndroidRuntime(1879): Caused by: java.lang.NullPointerException
03-18 16:18:54.389: E/AndroidRuntime(1879):     at br.com.calculadora.MainActivity.onCreate(MainActivity.java:39)
03-18 16:18:54.389: E/AndroidRuntime(1879):     at android.app.Activity.performCreate(Activity.java:5231)
03-18 16:18:54.389: E/AndroidRuntime(1879):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
03-18 16:18:54.389: E/AndroidRuntime(1879):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
03-18 16:18:54.389: E/AndroidRuntime(1879):     ... 11 more
03-18 16:23:54.839: I/Process(1879): Sending signal. PID: 1879 SIG: 9

After the changes suggested by @ExceptionAI, the code was:

MainActivity :

package br.com.calculadora;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
import android.widget.*;

public class MainActivity extends ActionBarActivity {


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


    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment())
                .commit();
    }

}


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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

/**
 * A placeholder fragment containing a simple view.
 */
public static class PlaceholderFragment extends Fragment {

    EditText etNum1, etNum2, etResultado;
    double num1, num2, resultado;
    Button btSomar;

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);

        etNum1 = (EditText) rootView.findViewById(R.id.calculo_numero1);
        etNum2 = (EditText) rootView.findViewById(R.id.calculo_numero2);
        etResultado = (EditText) rootView.findViewById(R.id.calculo_resultado);


        btSomar = (Button) rootView.findViewById(R.id.botao_soma);

        btSomar.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                num1 = Double.parseDouble(etNum1.getText().toString());
                num2 = Double.parseDouble(etNum2.getText().toString());     
                resultado = num1 + num2;
                etResultado.setText(String.valueOf(resultado));

            }

        });


        return rootView;
    }
}

}

Follow tb activity_main.xml :

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="br.com.calculadora.MainActivity"
    tools:ignore="MergeRootFrame" />
    
asked by anonymous 18.03.2014 / 21:45

3 answers

2

I had this problem and solved it like this:

/*
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment implements View.OnClickListener {
    
19.03.2014 / 21:27
1

You are trying to localize the button in the activity_main layout but your button is in the fragment_main fragment, so it is null.

Just move your code from onCreate of activity to onCreateView of fragment and use rootView.

btSomar = (Button) rootView.findViewById(R.id.botao_soma);

    
18.03.2014 / 21:54
0

It can also occur when a strange character is written to the sample code: Incorrect implementation

.....
private String getClassName() {
        String s = getClass().getName();
        return s.substring(s.lastIndexOf(",")); 
    }
.....

Correct deployment

.....
private String getClassName() {
        String s = getClass().getName();
        return s.substring(s.lastIndexOf(".)); /*Observe que nesta linha    
                                        deve ter um ponto em vez da vírgula*/
    }
.....
    
13.10.2016 / 20:34