pepino:
Estoy ceating un nuevo intento en un método para pasar un valor entero a otra actividad. Sin embargo, aparece un Null Object Reference / excepción de puntero nulo en el extremo receptor. Este es el método de llamada (de insectos es un tipo personalizado con un ID que es un número entero)
private void openInsectDetails(Insect insect){
Intent intent = new Intent(InsectCatchable.this, InsectDetails.class);
intent.putExtra("InsectDetails", insect.getId());
InsectCatchable.this.startActivity(intent);
}
Esta es la clase de recepción:
package com.ac_companion.wegner;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import java.util.ArrayList;
public class InsectDetails extends AppCompatActivity {
private final String TAG = "InsectDetails";
private int insectPositionMarker;
private Insect localInsect;
public int insectId;
//private Intent mIntent = new Intent();
public InsectDetails(){
Intent mIntent = getIntent();
insectId = mIntent.getIntExtra("InsectDetails", 0);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_insect_details);
localInsect = Util.getGlobalInsectList().get(insectId);
}
}
Esta es la excepción:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.ac_companion.wegner, PID: 16344
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.ac_companion.wegner/com.ac_companion.wegner.InsectDetails}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Intent.getIntExtra(java.lang.String, int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2548)
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 'int android.content.Intent.getIntExtra(java.lang.String, int)' on a null object reference
at com.ac_companion.wegner.InsectDetails.<init>(InsectDetails.java:20)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1078)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2538)
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)
¿Por qué mi mIntent.getIntExtra
un objeto nulo? Para mi unterstanding, su inicializado correctamente.
Stanislav Batura:
Creo que es debido a la actividad del ciclo de vida. No se debe utilizar un constructor de la actividad. Basta con mover el código en @OnCreate
méthode
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_insect_details);
Intent mIntent = getIntent();
insectId = mIntent.getIntExtra("InsectDetails", 0);
localInsect = Util.getGlobalInsectList().get(insectId);
}
Se obtiene una excepción, ya que tratar de conseguir la intención antes de crear la actividad.