Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android _联系人数据库中的ID列_Android_Contactscontract - Fatal编程技术网

Android _联系人数据库中的ID列

Android _联系人数据库中的ID列,android,contactscontract,Android,Contactscontract,我了解到不同表中的不同条目通过该表中的_ID列链接。例如,一个联系人可能有一个_ID=1 I get via ContactsContract.Contacts._ID 现在我想用电脑读取联系人的电话号码 Cursor phoneCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.C

我了解到不同表中的不同条目通过该表中的_ID列链接。例如,一个联系人可能有一个_ID=1 I get via

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也是1,因为它们属于一起,但它们并不相等。所以问题是Android如何匹配这些条目


谢谢,A.

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

ContactsContract.Contacts.Data
每个数据项都包含它所属的原始联系人的id。 每个原始联系人都包含其所属联系人的id


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

您可以在查看数据库表时获得更多详细信息

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

我创建了大约6个联系人来测试我的android联系人

在contacts表中,联系人id和原始联系人id实际上是相同的(这意味着contacts contract.contacts provider)

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

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

例如,我的原始联系人id为1

我在data1列中得到了3行,包括电子邮件、电话和显示名称

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

要获取电话号码,mimetype_id为5 要获取显示名称,mimetype\u id为6 获取电子邮件mimetype_id为1

如果你是初学者,你可能不理解所有这些东西……但是一旦你看到内部表格,你就会明白我告诉你的每一件事

只能通过联系人id或原始联系人id访问联系人详细信息,而不是通过每个表中的联系人id。该列的用途不同

你可以看看我在这张图上说了些什么