startActivityForResult и Intents Extras, кажется, что Extras не отбрасываются - PullRequest
15 голосов
/ 18 мая 2010

У меня есть этот код:

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

Тогда по ответу:

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

переменная onlineid равна нулю. Как я могу передать значение, а затем получить его обратно?

EDIT

Я даже пытался,

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

Ответы [ 4 ]

3 голосов
/ 18 апреля 2013

Это сделано по замыслу; Системные действия не будут возвращать дополнительные функции, с которыми они вызваны, поэтому вам придется управлять данными в другом месте.

К счастью, параметр resultCode полностью контролируется вами, что означает, что вы можете использовать его для индексации ваших данных.

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

Я не программист на Java, должен быть лучший способ реализовать карту пакетов, но это работает:)

0 голосов
/ 04 августа 2010

У меня тоже были проблемы с этим.

Вместо этой строки

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

Попробуйте

 intent.putExtra(EXTRA_ONLINE_ID, "" + v.getTag());
0 голосов
/ 15 марта 2011

Поле EXTRA_ONLINE_ID должно быть установлено в действии, которое вы запустили с помощью setResult. Если оно не устанавливает это значение в возвращаемом Намерении (которое отличается от того, что вы отправили), тогда вы получите нулевое значение.

0 голосов
/ 18 мая 2010

ok Проверьте, настроен ли ваш Activity android: launchMode как SingleTask или SingleInstance! это должно быть проблемой:)

...