更新联系人的多个电话号码

时间:2013-02-09 05:12:02

标签: android contacts android-contacts

我尝试使用以下内容更新特定联系人的多个电话号码 代码:

for(int j=0;j<allPhoneNumbersLength;j++)
{
PhoneInfo phoneInfo = (PhoneInfo) allPhoneNumbers.elementAt(j);
String phoneValue = phoneInfo.getValue();
int phoneType = phoneInfo.getIndex(); // phoneType = Phone.TYPE_HOME,  Phone.TYPE_WORK, etc
ContentProviderOperation.Builder builderPhone = ContentProviderOperation.newUpdate(Data.CONTENT_URI)
.withSelection(ContactsContract.Data.CONTACT_ID + "=?"+" AND "+ContactsContract.Data.MIMETYPE + "=?" + " AND "+Phone.TYPE+"=?",  new String[]{String.valueOf(contactID), Phone.CONTENT_ITEM_TYPE, String.valueOf(phoneType)});
if(phoneType == Phone.TYPE_HOME)
{
builderPhone.withValue(Phone.NUMBER, phoneValue)
.withValue(Phone.TYPE, Phone.TYPE_HOME);
}
else if(phoneType == Phone.TYPE_WORK)
{
builderPhone.withValue(Phone.NUMBER, phoneValue)
.withValue(Phone.TYPE, Phone.TYPE_WORK);
}
else if(phoneType == Phone.TYPE_FAX_HOME)
{
builderPhone.withValue(Phone.NUMBER, phoneValue)
.withValue(Phone.TYPE, Phone.TYPE_FAX_HOME);
}
op_list.add(builderPhone.build());

}
getContentResolver().applyBatch(ContactsContract.AUTHORITY, op_list);

使用此代码我试图更新三个数字,但只有“TYPE_FAX_HOME” 号码已更新,其他两个号码将从联系中删除。

请帮帮我。

4 个答案:

答案 0 :(得分:2)

我从您的代码中了解到,您使用所有3种类型的相同电话号码值。因此,在显示时,android将仅为联系人显示 1 。但是,如果您实际上编辑联系人,那么您可以看到,所有3种类型都填充了相同的数字。

P.S:我假设您尝试编辑的联系人已经为所有3种类型填充了一些号码。如果没有,请创建它们,然后尝试运行您的代码。

答案 1 :(得分:0)

哇......哇!为什么你使用“if”语句?!  你的代码可能是这样的:

for(int j=0;j<allPhoneNumbersLength;j++)
{
    PhoneInfo phoneInfo = (PhoneInfo) allPhoneNumbers.elementAt(j);
    int phoneType = phoneInfo.getIndex(); // phoneType = Phone.TYPE_HOME,  Phone.TYPE_WORK, etc
    ContentProviderOperation.Builder builderPhone = ContentProviderOperation.newUpdate(Data.CONTENT_URI)
        .withSelection(ContactsContract.Data.CONTACT_ID + "=?"+" AND "+ContactsContract.Data.MIMETYPE + "=?" + " AND "+Phone.TYPE+"=?",  new String[]{String.valueOf(contactID), Phone.CONTENT_ITEM_TYPE, String.valueOf(phoneType)});
    builderPhone.withValue(Phone.NUMBER, phoneValue)
        .withValue(Phone.TYPE, phoneType);
    op_list.add(builderPhone.build());
}
getContentResolver().applyBatch(ContactsContract.AUTHORITY, op_list);

答案 2 :(得分:0)

我不是Android程序员,但我认为问题出在最后一行代码中,循环更新了每一步中的联系信息但未应用它,在循环应用更新的最后一步,最后的更改应该是申请,如果你改变你的代码,我认为它应该工作,这意味着每个循环的步骤联系信息将更新:

for(int j=0;j<allPhoneNumbersLength;j++)
{
    PhoneInfo phoneInfo = (PhoneInfo) allPhoneNumbers.elementAt(j);
    int phoneType = phoneInfo.getIndex(); // phoneType = Phone.TYPE_HOME,  Phone.TYPE_WORK, etc
    ContentProviderOperation.Builder builderPhone = ContentProviderOperation.newUpdate(Data.CONTENT_URI)
        .withSelection(ContactsContract.Data.CONTACT_ID + "=?"+" AND "+ContactsContract.Data.MIMETYPE + "=?" + " AND "+Phone.TYPE+"=?",  new String[]{String.valueOf(contactID), Phone.CONTENT_ITEM_TYPE, String.valueOf(phoneType)});
    builderPhone.withValue(Phone.NUMBER, phoneValue)
        .withValue(Phone.TYPE, phoneType);
    op_list.add(builderPhone.build());
    getContentResolver().applyBatch(ContactsContract.AUTHORITY, op_list);
}

答案 3 :(得分:0)

Android模拟器的问题。代码在真实设备中工作正常。 谢谢你的帮助。