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

时间:2010-05-18 18:12:03

标签: android android-intent extras

我有这段代码:

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

4 个答案:

答案 0 :(得分:3)

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

幸运的是,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的映射,但这样做有效:)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我也遇到了一些问题。

而不是这一行

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

尝试

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

答案 3 :(得分:0)

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