【问题标题】:Android Contact Picker Intent always return empty extrasAndroid Contact Picker Intent 总是返回空的附加信息
【发布时间】:2015-03-30 20:22:51
【问题描述】:

我有一个联系人选择方法,它使用两个附加项来指定您是在我的应用程序中创建新的联系人快捷方式还是编辑现有的联系人快捷方式。

问题是无论我做什么,额外的似乎总是为空,当我尝试访问它们时会导致 nullPointerException。

我怀疑将 Intent 类型设置为 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) 获取它们,跳过将额外内容打包成一个捆绑包(不太了解这两个工作流程之间的区别),但唉,我遇到了同样的问题。

任何帮助将不胜感激。

【问题讨论】:

  • 您找到解决方案了吗?

标签: android android-intent android-contacts android-bundle


【解决方案1】:

编辑: 当您输入您的 long 值时,您会这样做

extras.putLong("shortcut", shortcut.getId());

所以你必须像这样检索它

long shortcutId = bundle.getLong("shortcut", 0);

然后您必须从启动ActivityIntent 中获取Bundle extras,如下所示。

switch (requestCode) {
    case (PICK_CONTACT_REQUEST):
        if (resultCode == getActivity().RESULT_OK) {
            Uri contactData = data.getData();
            //Here you get the intent extras
            Bundle bundle = getIntent().getExtras();
            //Boolean isEditing = false;
            //long shortcutId = 0;
            if (bundle != null) {
                Toast.makeText(getActivity(), "Bundle Not Null", Toast.LENGTH_SHORT).show();
                if (bundle.hasExtras()){
                    boolean isEditing = bundle.getBoolean("isEditing", false);                            
                    long shortcutId = bundle.getLong("shortcut", 0);
                    if(isEditiong != null)
                        Toast.makeText(getActivity(), "" + isEditing, Toast.LENGTH_SHORT).show();
                    if(shortcutId != null)
                        Toast.makeText(getActivity(), "" + shortcutId, Toast.LENGTH_SHORT).show();
                }
            }
        }            
    }
    break;
}

【讨论】:

    猜你喜欢
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2017-09-06
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    相关资源
    最近更新 更多