Подтвердить что ты не робот

StartActivityForResult и Intents Дополнительно, кажется, что дополнительные функции не отбрасываются

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

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 имеет значение null. Как передать значение, а затем получить его обратно?

ИЗМЕНИТЬ

Я даже пробовал,

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

Ответ 1

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

К счастью, параметр 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, должен быть лучший способ реализовать карту Bundles, но это работает:)

Ответ 2

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

Ответ 3

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

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

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

Try

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

Ответ 4

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