Pregunta Android getIntent (). GetExtras () devuelve nulo


Estoy tratando de pasar una cadena entre dos actividades. He hecho esto en otros proyectos usando el mismo método, pero por alguna razón obtengo una NullPointerException cuando llamo a intent.getStringExtra (String). También he intentado crear un paquete para los extras a través de

Bundle b = getIntent().getExtras();

pero eso también devolvió nulo. Debajo está el código que estoy tratando de usar.

Actividad A:

Intent myIntent = null; 
    String select = "";
            if (selection.equals("Chandelle")) {
                myIntent = new Intent(Commercial.this, Chandelle.class);
                select = "Chandelle";
            } else if (selection.equals("Eights on Pylons")) {
                myIntent = new Intent(Commercial.this, EightsOnPylons.class);
                select = "Eights on Pylons";
            }
 // Start the activity
    if (myIntent != null) {
        myIntent.putExtra("selection", select);
        Log.d("*** OUTBOUND INTENT: ", "" + myIntent.getExtras().get("selection"));
        startActivity(myIntent);
    }

Aquí está el código en la actividad B que trata de sacar el extra:

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 

    Intent i = getIntent();

    if (i == null) 
        Log.d("***DEBUG****", "Intent was null");
    else
        Log.d("**** DEBUG ***", "Intent OK");

    String MANEUVER_ID  = i.getStringExtra("selection"); //Exception points to this line
    Log.d("*** DEBUG", rec + " " + MANEUVER_ID);

He intentado casi todas las formas alternativas de pasar extras, pero todas parecen comportarse de esta manera. ¿Qué me estoy perdiendo?


32
2018-05-10 02:22


origen


Respuestas:


Añadir .ToString() a myIntent.putExtra("selection", select); para que sea myIntent.putExtra("selection", select.ToString());


12
2018-04-22 23:50



Afortunadamente encontré esta publicación. He estado luchando con esto durante horas y al final me di cuenta de que estoy enviando mis intenciones a la pestaña también. ;-) Para aquellos que todavía tienen problemas con esto, solo obtenga los extras de la actividad de tabHost y páselos a las pestañas de niños.

String userID;

. .

 Bundle getuserID = getIntent().getExtras();
    if (getuserID != null) {
        userID = getuserID.getString("userID");
    }

...

 intent = new Intent().setClass(this, Games.class);
    intent.putExtra("userID", userID);
    spec = tabHost.newTabSpec("games").setIndicator("Games",
                      res.getDrawable(R.drawable.tab_games))
                  .setContent(intent);
    tabHost.addTab(spec);

7
2017-09-22 16:26



Pruebe el código a continuación. He agregado una anulación a tu código, lo que hará el truco:

@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState); 

   Intent i = getIntent();

   if (i == null) 
       Log.d("***DEBUG****", "Intent was null");
   else
       Log.d("**** DEBUG ***", "Intent OK");

   String MANEUVER_ID  = i.getStringExtra("selection"); //Exception points to this line
   Log.d("*** DEBUG", rec + " " + MANEUVER_ID);
}

5
2018-06-07 08:34



Si aún no ha puesto nada en el paquete, siempre regresará null!

Puede crear y configurar el paquete por su cuenta:

Intent i = new Intent( ... );

i.putExtras(new Bundle());

Bundle bundle= i.getExtras(); // (not null anymore)

O bien, ponga un valor ficticio solo para forzar la inicialización (prefiero la primera solución):

Intent i = new Intent( ... );

i.putExtra("dummy", true); 

Bundle bundle= i.getExtras(); // (not null anymore)

2
2017-11-06 13:47



Mire su código, creo que puede suceder cuando puso algo en la Actividad 1. Porque usa "if ... else if", y no tiene "else" para otros casos. Si eso sucede, obtendrá un valor nulo en la Actividad 2. Verifique nuevamente este caso.


1
2018-05-10 02:33



En la actividad B usted en la siguiente función:

  protected String getStringExtra(Bundle savedInstanceState, String id) {
    String l;
    l = (savedInstanceState == null) ? null : (String) savedInstanceState
            .getSerializable(id);
    if (l == null) {
        Bundle extras = getIntent().getExtras();
        l = extras != null ? extras.getString(id) : null;
    }
    return l;
}

Lo está usando de la siguiente manera en la actividad B:

public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState); 
   String MANEUVER_ID  = getStringExtra(savedInstanceState, "selection");      
}

-1
2018-05-14 19:15