我读到不同表中的不同条目通过该表中的_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。
答案 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