startActivityForResult and Intents Extras, it seems extras are not pushed back

android, android-intent, extras

Solution

This is done by design; system activities will not send back the extras with which they're called, so you have to manage the data elsewhere.

Luckily, the `resultCode` parameter is fully controlled by yourself, which means that you can use it to index your data.

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);
    }
}

I'm not a Java programmer, there must be a nicer way to implement a map of Bundles, but this works :)

Problem

I have this code: ``` 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); ``` Then on response: ``` 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); } ``` the `onlineid` variable is null. How can I pass a value and then to receive it back? EDIT I even tried, ``` Bundle extras = data.getExtras(); // returns null ```

Original source