“联系人”数据库​​中的_ID列

时间:2010-11-12 09:18:15

标签: android contactscontract

我读到不同表中的不同条目通过该表中的_ID列链接。例如,联系人可能有_ID = 1我通过

ContactsContract.Contacts._ID

现在我想用

读取该联系人的电话号码
Cursor phoneCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId , null, null); 
//...
String number = phoneCursor.getString(phoneCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
String id = phoneCursor.getString(phoneCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone._ID));

这很好用,但我所期望的是,如果联系人的_ID为1,那么电话号码的_ID也是一个,因为它们属于一起,但它们不相等。所以问题是Android如何匹配这些条目?

谢谢,A。

2 个答案:

答案 0 :(得分:1)

联系人对应一个或多个原始联系人。联系人的实际数据存储为

ContactsContract.Contacts.Data

每个数据项都包含它所属的原始联系人的ID。 每个原始联系人都包含其所属联系人的ID。

因此,给定联系人ID,您可以找到它代表的原始联系人。获取原始联系人ID,然后查找此联系人中的数据。

答案 1 :(得分:0)

当您看到数据库表时,您可以获得更多详细信息

据我所知,这是我使用sqlite3数据库浏览器查看android contacts2.db文件时获得的信息

我创建了6个用于测试我的Android联系人的联系人

联系人表中的

_id和raw_contact_id实际上是相同的(这意味着ContactsContract.Contacts提供者)

在数据表中,我们使用mimetype Id作为where条件,获取电话号码和电子邮件以及名字和姓氏等人的真实详细信息

在考虑数据表时,使用raw_contact_id作为获取联系人特定记录的where条件

ex我的raw_contact_id是1

我有3行,其中包含data1列中的电子邮件,电话和显示名称

如果我们只想要电话或电子邮件或显示名称,您可能会问,如果您需要mimetype_id作为where条件

获取phonenumber mimetype_id为5 获取display_name mimetype_id是6 获取电子邮件mimetype_id是1

如果你是初学者,你可能不会理解所有这些东西......但如果你看到内部表格,你会得到我告诉你的所有内容

仅通过contact_id或raw_contact_id访问联系人详细信息,而不是通过每个表中的_id访问联系人详细信息..该列用于不同目的..

你可以看看我在这张图片中说的是什么 http://img94.imageshack.us/i/tablesxa.jpg