【问题标题】:Can't add a HOME email has been specified yet to an existing ANDROID contacs无法向现有 ANDROID 联系人添加 HOME 电子邮件
【发布时间】:2011-09-28 09:50:36
【问题描述】:

我在为 android 制作应用程序“联系人管理器”时遇到问题。 我已处理创建和删除具有姓名和电话的联系人 但是当我想向现有联系人添加更多家庭电子邮件信息但不能这样做时。

这是我的代码:

ArrayList ops = new ArrayList(); String selectName = ContactsContract.Data.CONTACT_ID + "= ? AND " + ContactsContract.Data.MIMETYPE + "= ? "; String[] NameArgs = new String[]{strId, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE};

        String selectPhone = ContactsContract.Data.CONTACT_ID + "= ? AND " + ContactsContract.Data.MIMETYPE + "= ? ";
        String[] phoneArgs = new String[]{strId, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE};

        String selectEmail = ContactsContract.Data.CONTACT_ID + "= ? AND " + ContactsContract.Data.MIMETYPE + "= ? ";
        String[] emailArgs = new String[]{strId, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE};

        String selectPostAdd = ContactsContract.Data.CONTACT_ID + "= ? AND " + ContactsContract.Data.MIMETYPE + "= ? AND " + ContactsContract.CommonDataKinds.StructuredPostal.TYPE + "= ? ";
        String[] postAddArgs = new String[]{strId, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE, String.valueOf(ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK)};

        ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
                .withSelection(selectName, NameArgs)
                .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, updContact_name.getText().toString())
                .build()); 
        ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
                .withSelection(selectPhone, phoneArgs)
                .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, updContact_phone.getText().toString())
                .build());

        ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
                .withSelection(selectEmail, emailArgs)
                .withValue(ContactsContract.Data.MIMETYPE, 
                    ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.Email.DATA, updContact_textMail.getText().toString())
                .withValue(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK)
                .build());          
        ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
                .withSelection(selectPostAdd, postAddArgs)
                .withValue(ContactsContract.Data.MIMETYPE, 
                        ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.StructuredPostal.DATA, updContact_textPostAdd.getText().toString())
                .withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME)
                .build());
        getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

此代码可用于更新联系人,但已创建一次项目信息(这里是电子邮件,StructruedPostal)。但是当我使用只有姓名、号码的 android 联系人应用程序创建它并保存时,我不会在我的 android 应用程序中更新它。

有人有这方面的经验请帮助我! tks

对不起我的语法英语!它有更多的错误和错误的语法。 :(。Tks 全部

【问题讨论】:

    标签: android contacts


    【解决方案1】:

    更新不会插入不存在的字段,请按照以下步骤操作。

    1. 第一次查询联系人的原始联系人 ID。

    2. 使用新的 Insert 方法插入之前创建时没有插入到联系人的数据(在 oppt 情况下 newUpdate() 可以正常工作)。

    一段代码是这样的

    String[] params = new String[] {"Give your Contact"};// you need query and get this too.
    String[] proj =  {ContactsContract.RawContacts._ID};
    Cursor c = context.getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI,proj, 
                    ContactsContract.Data._ID +"= ?", params, null);
    long rawContactId = -1;
    
    while(c.moveToNext()){
        rawContactId = c.getLong(0);
    }
    c.close();
    

    得到这些值后,

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    
    ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                    .withValue(ContactsContract.Data.RAW_CONTACT_ID, rawContactId)
                    .withValue(ContactsContract.Data.MIMETYPE,
                            ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
                            .withValue(ContactsContract.CommonDataKinds.Email.DATA, data.getEmail2Address())
                            .withValue(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_HOME)
                            .build());
    

    【讨论】:

    • 当您在虚拟机上打开默认联系人管理器并添加仅包含姓名和电话号码的联系人并保存时。当我通过我的联系人调试此行时,我的应用程序联系人管理器。 c.moveToNext() 为假且 rawContactId = c.getLong(0) 没有价值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2012-06-24
    • 1970-01-01
    相关资源
    最近更新 更多