0

Estoy recibiendo este log de error al pulsar sobre un boton en una app de Android en A. Studio.

Attempt to invoke virtual method 'void android.view.View.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

2019-05-07 15:36:32.766 9071-9071/org.pcc.fabs E/AndroidRuntime: FATAL EXCEPTION: main Process: org.pcc.fabs, PID: 9071 java.lang.RuntimeException: Unable to start activity ComponentInfo{org.pcc.fabs/org.pcc.fabs.Agenda}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setOnClickListener(android.view.View$OnClickListener)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setOnClickListener(android.view.View$OnClickListener)' on a null object reference at org.pcc.fabs.Agenda.onCreate(Agenda.java:20) at android.app.Activity.performCreate(Activity.java:6662) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)  at android.app.ActivityThread.-wrap12(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6077)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

La clase Main, en la que está el botón tiene este codigo:

//BOTON PARA CONTACTO
layoutFabAdd.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent (view.getContext(), Agenda.class);
        startActivityForResult(intent, 0);
    }
});

La clase agenda es:

public class Agenda extends AppCompatActivity {
    public Button all,n;

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

        all = (Button)findViewById(R.id.elements);
        n = (Button)findViewById(R.id.new_element);

        all.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent (view.getContext(), ElementsActivity.class);
                startActivityForResult(intent, 0);
            }
        });

        all.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent (view.getContext(), NewActivity.class);
                startActivityForResult(intent, 0);
            }
        });

    }
}

AndroidManifest:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </activity>
    <activity android:name=".Agenda"></activity>
    <activity android:name=".EditActivity"></activity>
    <activity android:name=".ElementsActivity"></activity>
    <activity android:name=".NewActivity"></activity>
</application>
aidamf
  • 51
  • 5
  • 2
    Posible duplicado de [¿Cuál es la solución a todos los errores NullPointerException presentes, pasados y futuros?](https://es.stackoverflow.com/questions/42977/cu%c3%a1l-es-la-soluci%c3%b3n-a-todos-los-errores-nullpointerexception-presentes-pasados) – Nicolas Oñate May 07 '19 at 13:43
  • @aidamf seguro qiue ambos botones estan en el xml agenda? – Igmer Rodriguez May 07 '19 at 13:51

2 Answers2

0

Este detalle tiene 2 causas,

1) en tu clase MAIN, el layout cargado mediante setContentView() no contiene el botón , debes asegurar que el .xml contiene este elemento.

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout<NOMBRE LAYOUT>);
        ...
        ...
   }

2) Existe el boton en el layout cargado mediante setContentView() pero no estas obteniendo la referencia mediante findViewById(), debes asegurar que obtienes la referencia

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout<NOMBRE LAYOUT>);

        //Obtiene referencia.
        layoutFabAdd = (Button)findViewById(R.id.<ID ELEMENTO en LAYOUT>);

        ...
        ...
   }
Jorgesys
  • 103,630
  • 13
  • 52
  • 124
0

Hay algo que no entiendo en tu codigo.. Si tu clase se llama Agenda ,el setContentView hace referencia a otro archivo XML activity-main ... deberia ser asi :

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

}

Y asegurate que el button existe en el archivo XML donde apunta la clase Agenda

Apse Sony
  • 87
  • 8
  • Puede usar el mismo layout en otra activity , no es esencial usar activity_main.xml aunque no es lo común. – Jorgesys May 07 '19 at 20:09