我有这段代码:
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
答案 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中设置该值(与您发送的不同),那么您将获得一个空值。