2013-02-09 79 views
2

我嘗試更新使用以下 代碼特定聯繫人的多個電話號碼:更新多個電話號碼

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」 號已更新,其他兩個號碼將從聯繫人中刪除。

請幫幫我。

+0

首先,你使用**否則,如果**這裏。我希望你知道,只有一個梯子中的陳述將被輸入。 接下來,什麼是「** phoneType **」的價值? – SudoRahul 2013-02-09 05:17:18

+0

我編輯了代碼。 – Parveen 2013-02-09 05:24:11

回答

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); 
+0

很棒。 我將更改代碼。 您是否應該知道爲什麼更新了最後一個電話號碼,以及爲什麼其他號碼已從聯繫人中刪除? – Parveen 2013-02-09 05:49:23

2

我從你的代碼,您使用的相同電話號碼值的所有3種類型的教訓。因此,在顯示時,android將僅顯示聯繫人的。但是,如果你真的編輯接觸,那裏你可以看到,所有3種已填入相同的號碼。

P.S:我假設爲你正在試圖做的編輯的接觸,已經彈出了所有3種類型的一些數字。如果沒有,請創建它們,然後嘗試運行您的代碼。

+0

是的你是對的。但相同的電話號碼填充了三次相同的類型。你應該知道爲什麼嗎? – Parveen 2013-02-09 05:59:43

+0

我的朋友,你已經使用** phoneValue **無處不在。我真的懷疑這種變化。檢查你的** FOR **循環。它對所有電話號碼類型具有相同的** phoneValue **。 – SudoRahul 2013-02-09 06:06:55

+0

我編輯了代碼,phoneValue也改變了phoneType。 – Parveen 2013-02-09 06:13:20

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

問題與Android模擬器。代碼在實際設備中正常工作。 感謝您的幫助。