用户清理区域?

问题描述 投票:0回答:1

已删除已删除已删除已删除

android duplicates cursor android-contacts android-contentresolver
1个回答
1
投票

让我们回顾一下 ContactsContract DB 的组织方式:

  1. 联系人表 - 每个联系人包含一行,但几乎没有任何信息
  2. RawContacts 表 - 可以有多行,每行分配给一个联系人 ID(来自上表),包含多个数据行的逻辑组,通常用于单个 SyncProvider(例如 Google)。
  3. 数据表 - 包含 RawContact 的实际数据,每行都有一个 MIMETYPE 列,用于说明该行的数据类型(电话、电子邮件、姓名等)+ 15 个数据列来保存信息本身。

还有伪表,例如您在代码中查询的

ContactsContract.CommonDataKinds.Phone
,它基本上查询数据表,但具有特定的 MIMETYPE 值,例如
Phone.CONTENT_ITEM_TYPE

在您的代码中,您正在查询 CommonDataKinds.Phone.CONTENT_URI,这意味着您正在询问数据库中的所有不同电话号码。 因此,如果单个联系人有 3 个电话号码,您将获得该联系人的 3 行(每行都有不同的电话号码)。

但是查看您的输出,似乎每个联系人在数据库中都有一个电话号码,但看起来联系人本身是重复的。 例如,

Amber Altingle
的联系人 ID 为 3 和 11,这意味着您有两个名为
Amber Altingle
的独立联系人。 这不是查询代码中的重复,但可能是联系人创建代码中的重复。

© www.soinside.com 2019 - 2024. All rights reserved.