19

我有这个代码:

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变量为空。如何传递一个值然后将其接收回来?

编辑

我什至试过,

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

4 回答 4

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

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

于 2013-04-18T03:28:42.547 回答
0

EXTRA_ONLINE_ID 字段必须在您使用 setResult 启动的活动中设置。如果它没有在返回的 Intent 中设置该值(与您发送的不同),那么您将获得一个空值。

于 2011-03-15T07:05:14.877 回答
0

ok 检查您的 Activity android:launchMode 是否配置为 SingleTask 或 SingleInstance!那一定是问题:)

于 2010-05-18T18:52:55.193 回答
-1

我也遇到了一些问题。

而不是这条线

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

尝试

 intent.putExtra(EXTRA_ONLINE_ID, "" + v.getTag());
于 2010-08-04T05:23:50.580 回答