首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >触点和原始触点有什么不同?

触点和原始触点有什么不同?
EN

Stack Overflow用户
提问于 2011-03-11 12:52:55
回答 2查看 11.3K关注 0票数 22

我有一个“转储”实用程序,我正在使用它来研究ContactsContract,因为我在文档中没有得到它。但是,当我转储联系人时,它会在表中统计出263条记录,但我设备上的联系人应用程序会列出我有244条记录(“显示244条联系人”)。

有人能解释一下这种差异吗?

我的Sprint LG的联系人应用程序为我同步的每个帐户都有显示选项,我已经进入并检查了所有帐户,所以不应该有任何过滤。

我在实用程序中使用的主要URI是:

代码语言:javascript
复制
    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, ",");

后跟(对于上述查询中的每个_ID ):

代码语言:javascript
复制
                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),该列是一个自动递增的主表

key。

  • 数据表包含所有的联系信息,如电话号码,邮件id,

地址等。

  • 原始联系人指向创建的实际联系人。因此,我们在添加联系人时使用原始联系人。

  • 用户不能在contacts表中添加任何数据。此文件中的数据

表在内部填充,原因是

联系人的聚合。

您的逻辑对某些联系人起作用的原因是:_ID对于联系人,原始联系人保持不变,直到发生任何联系人聚合。假设您添加了两个同名为abc的联系人。在这里,原始联系人的_ID增加两次,而联系人的_ID只增加一次,因为这两个联系人由于联系人的聚合而合并

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-11 17:07:27

这种差异是由于聚合规则导致RawContacts合并到Contacts造成的。

当列表显示联系人时,您可以将联系人添加到RawContacts。因此出现了计数上的差异。

请在ContactsRawContactsData here之间找到一些描述。即使问题不同,您也可以得到ContactsRawContacts之间的区别。

票数 24
EN

Stack Overflow用户

发布于 2016-02-15 18:42:12

这三个表通常通过它们的契约类的名称来引用。这些类为表使用的内容URI、列名和列值定义常量:

ContactsContract.Contacts表:-表示不同人的行,基于原始联系人行的聚合。

ContactsContract.RawContacts表:-包含特定于用户帐户和类型的个人数据摘要的行。

ContactsContract.Data表:-包含原始联系人详细信息的行,例如电子邮件地址或电话号码。

有关更多信息,请访问click

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5269079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档