我有一個「轉儲」實用程序,我正在使用它來學習ContactsContract,因爲我沒有在文檔中找到它。當我轉儲聯繫人時,它會統計表中的263條記錄,但是,我的設備上的聯繫人應用程序列出了我有244(「顯示244個聯繫人」)。聯繫人與原始聯繫人有什麼區別?
我的Sprint LG的通訊錄應用程序爲我同步的每個帳戶顯示選項,並且已經進入並檢查了所有這些帳戶,因此不應該進行任何篩選。
,我使用的實用程序的主URI:(在上面的查詢每個_ID)
Uri uriRawContacts = ContactsContract.RawContacts.CONTENT_URI;
String[] projection = new String [] {
ContactsContract.RawContactsEntity._ID,
ContactsContract.RawContactsEntity.CONTACT_ID,
ContactsContract.RawContactsEntity.DELETED,
ContactsContract.RawContactsEntity.AGGREGATION_MODE,
};
Cursor cursorRaw = cr.query(uriRawContacts, projection, null, null, null);
DumpCursor.dumpAnyCursor(getApplicationContext(), "RawContacts", cr, cursorRaw, ",");
跟:
long rawContactId = Long.parseLong(anyCursor.getString(anyCursor.getColumnIndex(RawContacts.CONTACT_ID)));
Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId);
Uri entityUri = Uri.withAppendedPath(rawContactUri, Entity.CONTENT_DIRECTORY);
Log.d(TAG, "rawContactUri: " + rawContactUri.toString());
Log.d(TAG, "entityUri: " + entityUri.toString());
Cursor c = cr.query(entityUri, new String[] { RawContacts.SOURCE_ID, Entity.DATA_ID, Entity.MIMETYPE, Entity.DATA1 }, null, null, null);
我然後通過第一查詢循環,顯示我的投影中的所有列,然後使用第一個查詢循環中的_ID字段發出第二個查詢並轉儲其所有列。從這裏換位爲了方便回答
子彈: 參考參考的更詳細的解釋。更具體地說,鼓勵您閱讀聚合規則。 價:Click here for the original cited text that follows
- 聯繫人數據庫被分成3代表接觸,生 聯繫人和數據。
- 每個表都包含一列(_ID),它是一個自動遞增的主鍵
鍵。- 數據表包含了諸如電話號碼,郵箱ID,
地址等- 的原始接觸點產生的實際接觸的所有聯繫信息。因此,我們 使用原始聯繫人,同時添加一個 聯繫人。
- 用戶不能在聯繫人表中添加任何數據。這個
表中的數據由於
聚合的聯繫人而在內部填充。你的邏輯工作了聯繫人的一些 的原因是:_ID聯繫人, 生接觸,直到有 正在 發生任何接觸的聚集保持不變。假設你添加兩個聯繫人 同名abc。在這裏,_ID爲 原料接觸增量的兩倍,而 _ID聯繫人增量只有一次因爲這兩個觸點被合併,由於 聯繫人的聚集
上次批准的編輯是不正確的。如果你閱讀原文,你會看到缺少標點符號和3張表格的重點。然後,他/他把這個引用爲「數據表」,聯繫人包含所有......「您修改了原作者的正確語句。 – mobibob 2013-06-22 18:06:18