如何在 Android 上查询所有符合特定条件的联系人?
比方说,我想要所有联系人,他们有姓名、电话号码,但没有头像。
根据我对 SQL 的理解,我需要某种选择,将其传递给我的查询,但在上面的示例中它看起来如何呢?
我在问,因为我目前正在运行一个应用程序,它首先查询所有联系人,然后我遍历它并过滤它,这似乎比直接查询正确的联系人性能低得多
如何在 Android 上查询所有符合特定条件的联系人?
比方说,我想要所有联系人,他们有姓名、电话号码,但没有头像。
根据我对 SQL 的理解,我需要某种选择,将其传递给我的查询,但在上面的示例中它看起来如何呢?
我在问,因为我目前正在运行一个应用程序,它首先查询所有联系人,然后我遍历它并过滤它,这似乎比直接查询正确的联系人性能低得多
从联系人存储在 SQLite 数据库中的意义上说,您是正确的,但它们是通过联系人内容提供程序访问的。
联系人内容提供程序以三表方式组织。数据结构的底部是数据表。在这里,您将找到与特定 RawContact 相关的所有数据(稍后将讨论)。数据表存储电话号码、电子邮件、地址等信息。它通过使用在 mimetypes 数据库上定义的 MIME 名称值对来实现。上一层是 RawContacts 数据库。此处包含与同一帐户相关的所有信息(即,联系 John Doe 可能有 twitter 和 Facebook 帐户)。简而言之,RawContacts 表跟踪属于同一个人的数据 MIME 类型,因此无需为不同的帐户多次存储相同的信息。在数据结构的顶部,您有一个联系人表,它将一个人的所有信息分组。它基本上是将所有帐户信息统一到一个联系人中的一种方式。像往常一样考虑这种联系方式。
您应该看一下 Loader 类,它允许您在后台线程上执行查询。如果在为 Cursor 实现 Loader 回调后使用此类,您将创建一个 CursorLoader。它的构造函数参数之一是典型的 MySQL where 子句,您可以在其中指定要包含在查询中的约束。
在这里,您将找到加载程序查询数据库的指南。