對於聯繫人備份應用程序,我將所有信息保存到CSV文件,然後我需要恢復它。它工作得很好,但是如果我按兩次恢復,它會複製所有聯繫人。如何在插入新聯繫人時檢測到重複的聯繫人?
我試過下面的代碼刪除重複項,它確實工作,但在某些情況下失敗。 基本上,如果沒有明確的DISPLAY_NAME,就會失敗,例如如果聯繫人似乎只有電話號碼,而DISPLAY_NAME是電話號碼,或者電子郵件地址是相同的。我不明白爲什麼它不會總是工作,因爲它似乎DISPLAY_NAME字段包含電話號碼/電子郵件地址。
這裏是我使用的代碼:
private boolean contactExists(String displayname, String emailstring, String phonestring){
Cursor crsr = BA.applicationContext.getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI,
new String[] { "display_name", "_id"},
"display_name = ? ",
new String[] {displayname},
null);
while (crsr.moveToNext()){
HashMap m = new HashMap();
for (int col = 0; col < crsr.getColumnCount(); col++) {
m.put(crsr.getColumnName(col), Integer.valueOf(col));
}
int id = crsr.getInt(((Integer)m.get("_id")).intValue());
String emails = GetEmails(id);
String phones = GetPhones(id);
if (emails.contentEquals(emailstring) && phones.contentEquals(phonestring))
{
crsr.close();
return true;
}
}
crsr.close();
return false;
}
UPDATE: 我試圖與具有相同的結果DISPLAY_NAME_PRIMARY。
但是我注意到,如果我在同一個設備/仿真器上創建聯繫人,當我重新恢復相同的聯繫人時,檢測到重複。 在穿越設備時,似乎有一個原因是不起作用的,那就是在某些時候特殊字符被刪除。 例如從CSV讀取顯示名稱「John.Doe」,但當它被插入時,它變成「John Doe」。我看不到代碼中的「。」。被剝奪了。
感謝您回覆Joe。我在發佈之前已經閱讀過關於DISPLAY_NAME_PRIMARY的內容,但我無法找到如何檢索它,我會嘗試它,但如果它不適用於GB(2.3),那麼我無法使用它。我簡單地查詢DISPLAY_NAME,並將其保存爲CSV(帶有其他字段),然後在還原時讀取它。我說你看到了許多問題,但我想保持簡單。我使用CSV來保持數據的可讀性,並且需要將其同步到Dropbox而不是谷歌聯繫人。 – thedesolatesoul 2013-03-21 16:44:43