startActivityForResult和Intents Extras,似乎额外的东西不会被推回

Pen*_*m10 17 android extras android-intent

我有这个代码:

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);
Run Code Online (Sandbox Code Playgroud)

然后回复:

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);
    }
Run Code Online (Sandbox Code Playgroud)

onlineid变量为空.我怎样才能传递一个值然后再接收它?

编辑

我甚至试过,

Bundle extras = data.getExtras(); // returns null
Run Code Online (Sandbox Code Playgroud)

Ja͢*_*͢ck 6

这是由设计完成的;系统活动不会发回调用它们的额外数据,因此您必须在其他地方管理数据。

幸运的是,该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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我不是 Java 程序员,必须有更好的方法来实现 Bundles 的映射,但这是有效的 :)