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

Android 更新联系人中的多个电话号码,android,contacts,android-contacts,Android,Contacts,Android Contacts,我尝试使用以下方法更新特定联系人的多个电话号码 代码: for(int j=0;jWow…!为什么要使用“if”语句?! 您的代码可以如下所示: for(int j=0;j<allPhoneNumbersLength;j++) { PhoneInfo phoneInfo = (PhoneInfo) allPhoneNumbers.elementAt(j); int phoneType = phoneInfo.getIndex(); // phoneType = Phone.

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

for(int j=0;jWow…!为什么要使用“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);

用于(int j=0;j我从您的代码中了解到,您对所有3种类型都使用了相同的电话号码值。因此,在显示时,android将仅为联系人显示其中的1。但是如果您实际编辑了该联系人,您可以看到,所有3种类型都填充了相同的电话号码号码


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

我不是Android程序员,但我认为问题在于最后一行代码,循环在每一步中更新联系人信息,但不应用它d循环应用更新的步骤,最后的更改应该是应用,如果您像这样更改代码,我认为应该可以工作,这意味着对于每个循环的步骤,联系人信息将更新:

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);
}

Android Emulator的问题。代码在真实设备中运行良好。
谢谢您的帮助。

首先,您在这里使用的是else if。我希望您知道,在梯形图中只有1条语句将被输入。接下来,“phoneType”的值是多少等待?我已经编辑了代码。很好。我将更改代码。你应该知道为什么上次电话号码被更新,以及为什么其他号码被从联系人中删除吗?是的,你是正确的。但是同一个电话号码被同一类型填充了三次。你应该知道为什么吗?我的朋友,你在任何地方都使用了phoneValue。我真的怀疑这是否会改变。Check您的FOR循环。它对所有电话号码类型都具有相同的phoneValue。我编辑了代码,phoneValue也更改了phoneType。如果您得到,每个“String phoneValue=phoneInfo.getValue();”的值都不同,则代码将正常工作。
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);
}