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.