Pasando un número entero con un resultados Intención en una referencia nula Object

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.getIntExtraun 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 @OnCreatemé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.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=404323&siteId=1
Recomendado
Clasificación