通过Android上的某些条件从SQL数据库获取联系人

时间:2013-07-11 15:06:30

标签: android contacts contactscontract

如何在Android上查询符合特定条件的所有联系人?

我们说,我希望所有的联系人都有姓名,电话号码,但没有个人资料图片。

正如我理解SQL那样,我需要某种选择,这会被传递给我的查询,但是在上面的例子中它会如何看待?

我问,因为我正在运行一个首先查询所有联系人的应用程序,之后我会遍历它并对其进行过滤,这似乎不那么高效,然后直接查询正确的联系人

1 个答案:

答案 0 :(得分:3)

在联系人存储在SQLite数据库中的意义上,您是正确的,但可以通过“联系人内容提供者”访问它们。

联系人内容提供程序以三表格形式组织。数据结构的底部是数据表。在这里,您将找到与特定RawContact相关的所有数据(稍后将讨论)。数据表存储电话号码,电子邮件,地址等信息。它通过使用mimetypes数据库上定义的MIME名称值对来实现。一个级别是RawContacts数据库。这里所有与同一帐户相关的信息(即联系John Doe可能有Twitter和Facebook帐户)。简而言之,RawContacts表跟踪属于同一个人的Data MIME类型,因此不需要为不同的帐户多次存储相同的信息。在数据结构的顶部,您可以使用Contacts表对单个人的所有信息进行分组。它基本上是一种将所有帐户信息统一到一个联系人的方式。可以像往常一样想想这些联系人。

您应该查看Loader类,它将允许您在后台线程上执行查询。如果在为Cursor实现Loader回调后使用此类,则将创建CursorLoader。它的一个构造函数参数是 典型的MySQL where子句,您可以在其中指定要包含在查询中的约束。

Here您会找到Loaders查询数据库的指南。