所以我现在知道联系人已保存在三个表中:
我正在使用的表格:
在answer中,我根据@marmor使用数据表读取用户的所有电话号码。
我从上面链接中的解决方案中学到了什么
使用@marmor在上述链接中提供的答案,我可以查询(对于电话簿中的所有联系人)此特定联系人映射到contact_id
的{{1}}。
定义contact_id和电话号码集:
set of phone numbers
:是电话簿中可以包含多种类型的关联帐户的联系人的ID。
contact_id
:是一个包含特定contact_id的所有电话号码的集合。
假设我有两个用户X和Y:
用户x的contact_id = 0。
用户y的contact_id = 1。
现在,假设用户x链接了以下数字:+ 1111-xxx和+ 2222-xxx
假设用户y链接了以下数字:+ 3333-xxx和+ 2222-xxx
现在,我决定将所有这些号码保存到手机上的本地数据库中:
情况1:
如果我使用这些用户的编号作为要保存到数据库的主要ID,则用户x中的+ 2222-xxx将覆盖用户y中的+ 2222-xxx。
情况2:
如果我使用contact_id作为主要ID保存到数据库中,则对应于同一user_id(0)的+ 1111-xxx和+ 2222-xxx都将被覆盖,因此一个将获胜。
情况3:
如果使用电话号码+ contact_id的组合作为主要ID来保存到数据库中,则可能可行,这似乎不是很干净的解决方案,而且不稳定。
问题:
是否有可能获得一个唯一的id来标识contact_id中找到的每个号码?
谢谢。
答案 0 :(得分:1)
A。绝对有可能获得数据行ID:
在查询Data.CONTENT_URI时,只需将Data._ID添加到您的投影中,然后就可以获取特定的Data ID并对其进行任何操作。
B。将数据ID保留为联系/数字组合键在您的数据库中是否明智?否。
数据ID会随着时间而变化,并且不能保证保持一致,因此不建议将其持久保存到本地数据库中,并将其用作长期运行的标识符。
C。您可以做什么呢?
使用E164电话号码作为密钥,因为这是无法更改的静态信息,联系人可能会获取或丢失带有其联系信息的电话号码,但是该电话号码仍然是相同的电话号码。
只需在您的钥匙-电话号码-与联系人之间建立一对多连接。 因此,单个电话号码X可以指向0个或多个当前在其数据行中具有该号码的联系人。
您需要定期运行(例如每天一次)以使用设备通讯录中的更改刷新内部数据库。