StartActivityForResult y Intents Extras, parece que los extras no son rechazados

Tengo este código:

Intent intent = new Intent(); intent.setAction(Intent.ACTION_PICK); intent.setData(ContactsContract.Contacts.CONTENT_URI); intent.putExtra(EXTRA_ONLINE_ID, (String) v.getTag()); startActivityForResult(intent, PICK_CONTACT); 

Entonces en la respuesta:

 public void onActivityResult(int reqCode, int resultCode, Intent data) { switch (reqCode) { case (PICK_CONTACT): if (resultCode == Activity.RESULT_OK) { try { Uri contactData = data.getData(); String onlineid = data.getStringExtra(EXTRA_ONLINE_ID); } catch (Exception e) { e.printStackTrace(); } } break; } super.onActivityResult(reqCode, resultCode, data); } 

La variable onlineid es null. ¿Cómo puedo pasar un valor y luego volver a recibirlo?

EDITAR

Incluso lo intenté,

 Bundle extras = data.getExtras(); // returns null 

Esto se hace por diseño; Las actividades del sistema no devolverán los extras con los que se llaman, por lo que tendrá que administrar los datos en otro lugar.

Afortunadamente, el parámetro resultCode es totalmente controlado por usted mismo, lo que significa que puede usarlo para indexar sus datos.

 private final int PICK_CONTACT = 0; private Bundle[] myDataTransfer = { null }; ... Bundle myData = new Bundle(); myData.putString(EXTRA_ONLINE_ID, (String) v.getTag()); myDataTransfer[PICK_CONTACT] = myData; // create intent and all startActivityForResult(intent, PICK_CONTACT); ... public void onActivityResult(int reqCode, int resultCode, Intent data) { if (resultCode == PICK_CONTACT) { Bundle myData = myDataTransfer[resultCode]; String onlineid = myData.getString(EXTRA_ONLINE_ID); } } 

No soy un programador de Java, debe haber una mejor manera de implementar un mapa de Bundles, pero esto funciona 🙂

Ok Compruebe si su actividad android: launchMode está configurado como SingleTask o SingleInstance! Ese debe ser el problema

Yo estaba corriendo en algunos problemas con esto también.

En lugar de esta línea

  intent.putExtra(EXTRA_ONLINE_ID, (String) v.getTag()); 

Tratar

  intent.putExtra(EXTRA_ONLINE_ID, "" + v.getTag()); 

El campo EXTRA_ONLINE_ID tendrá que establecerse en la actividad que ha iniciado con setResult. Si no se establece ese valor en la Intención devuelta (que es diferente de lo que se envió), obtendrá un valor nulo.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.