我有一个“转储”实用程序,我正在使用它来学习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