我有一个联系人选择方法,它使用两个额外的方法来指定您是在我的应用程序中创建新的联系人快捷方式还是编辑现有的联系人快捷方式。
问题在于,无论我做什么,额外内容似乎总是为null,当我尝试访问它们时会导致nullPointerException。
我怀疑将意图类型设置为ContactsContract.Contacts.CONTENT_TYPE
会重置任何用户定义的附加内容,但我不确定。
这就是我现在正在做的事情:
联系拣选意图
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
Bundle extras = new Bundle();
extras.putBoolean("isEditing", isEditing);
extras.putLong("shortcut", shortcut.getId());
intent.putExtras(extras);
startActivityForResult(intent, PICK_CONTACT_REQUEST);
在 onActivityResult()
中switch (requestCode) {
case (PICK_CONTACT_REQUEST):
if (resultCode == getActivity().RESULT_OK) {
Uri contactData = data.getData();
Bundle bundle = data.getExtras();
Boolean isEditing = false;
long shortcutId = 0;
if (bundle != null) {
Toast.makeText(getActivity(), "Bundle Not Null", Toast.LENGTH_SHORT).show();
if (bundle.containsKey("isEditing")) {
isEditing = bundle.getBoolean("isEditing", false);
Toast.makeText(getActivity(), "" + isEditing, Toast.LENGTH_SHORT).show();
}
if (bundle.containsKey("shortcutId")) {
shortcutId = bundle.getLong("shortcutId", 0);
Toast.makeText(getActivity(), "" + shortcutId, Toast.LENGTH_SHORT).show();
}
}
从未显示过祝酒词,因为我猜想找不到捆绑包。
我也尝试了一个不同的工作流程,使用Intent.putExtraString("isEditing", value)
,然后使用intent.getStringExtra("isEditing", false)
跳过将附加内容捆绑在一起(不太明白两个工作流程之间的区别)但是,我遇到了同样的问题。
非常感谢任何帮助。
答案 0 :(得分:-1)
编辑:
当您输入long
值时,您可以
extras.putLong("shortcut", shortcut.getId());
所以你必须像
一样检索它long shortcutId = bundle.getLong("shortcut", 0);
然后您必须从Bundle
推出Intent
的{{1}}个额外内容,如下所示。
Activity