使用ContactsContract,查询匹配的名称或电子邮件

时间:2018-05-16 21:07:27

标签: android android-contentprovider contactscontract

是否可以对ContactsContract进行一次查询,以获得一组与显示名称或电话号码或电子邮件地址匹配的联系人?

这实际上是联系人和数据“表”的连接(在引号中,因为它们看起来只是通过界面的表,但可能不是)。

换句话说,我想要一个where子句(简化语法)

parseInt(document.getelementById(idString).value)

并且表格像

一样加入
where Contacts.DISPLAY_NAME like "%?%" 
   or (Data.MIMETYPE = Phone.CONTENT_ITEMTYPE
       and CommonDataKinds.Phone.NUMBER like "%?%")
   or (Data.MIMETYPE = Email.CONTENT_ITEMTYPE
       and CommonDAtaKinds.Email.ADDRESS like "%?%")

我可以将此作为单独的查询而不使用连接,但是然后对结果进行排序变得困难。我希望他们按展示名称排序。

2 个答案:

答案 0 :(得分:1)

如果您只想匹配姓名/电子邮件/电话,则可以执行以下操作:

WHERE Data.MIMETYPE IN (StructuredName.CONTENT_ITEM_TYPE, Phone.CONTENT_ITEM_TYPE, Email.CONTENT_ITEM_TYPE) 
AND Data.DATA1 LIKE "%?%"

如果您可以扩展可能的匹配字段,那么您可以将查询简化为:

WHERE Data.DATA1 LIKE "%?%"

这将匹配CommonDataKinds.StructuredName.DISPLAY_NAMECommonDataKinds.Email.ADDRESSCommonDataKinds.Phone.NUMBER等。

答案 1 :(得分:0)

答案让我满脸通红。 数据表已经是一个连接(或看起来像一个,也许它是内部的非规范化表)。因此,我需要做的就是直接查询所有三个匹配项:

where Data.DISPLAY_NAME like "%?%" 
   or (Data.MIMETYPE = Phone.CONTENT_ITEMTYPE
       and CommonDataKinds.Phone.NUMBER like "%?%")
   or (Data.MIMETYPE = Email.CONTENT_ITEMTYPE
       and CommonDAtaKinds.Email.ADDRESS like "%?%")

请注意上面的数据 .DISPLAY_NAME。