Android 使用外键和触点合同

Android 使用外键和触点合同,android,Android,我正在构建一个应用程序,我需要用户选择一些“喜爱的”联系人和电话号码。我可以使用 startActivityForResult(new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI), PICK_CONTACT_REQUEST); 我能提取我需要的所有信息 然后我继续将联系人的_id保存到我自己的数据库中。我的计划是以后列出所有“喜爱的”联系人,并在列表视图中显示姓名和电话号码 我想保存联系人id而不是姓名和号码,这样我的listvie

我正在构建一个应用程序,我需要用户选择一些“喜爱的”联系人和电话号码。我可以使用

    startActivityForResult(new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI), PICK_CONTACT_REQUEST);
我能提取我需要的所有信息

然后我继续将联系人的_id保存到我自己的数据库中。我的计划是以后列出所有“喜爱的”联系人,并在列表视图中显示姓名和电话号码

我想保存联系人id而不是姓名和号码,这样我的listview将反映用户对其联系人所做的任何更改

但现在我被卡住了。我不知道如何将带有联系人ID的表转换为带有联系人名称的表

我想买点像这样的东西

my_table LEFT OUTER JOIN contacts_table ON (my_table.contact_id = contacts_table._id)

您在这里要做的是存储这些ID,然后当您想从用户的通讯簿中提取姓名时,您必须将这些ID与您存储的联系人进行交叉引用,以便将其过滤掉


基本上,您不能加入一个不存在的表(contacts\u table)。

您可能只需按自己的意愿保存contect id,然后循环浏览contact id并逐个查找联系人,提取所需的数据。如果这足够快,您就不需要任何SQL连接(“按需优化”)


也许使用一些Google API和HTTP/XML来获取联系人会更快(也许还会缓存一段时间)。

我想我对数据库和内容提供商的研究对于我想要实现的目标来说有点过头了,但我想这样做是为了更好地理解如何使用它们……数据库很好,当您尝试加入数据库上的contentprovider时,就会出现问题。这是不可能的。不过,您可以创建一个帮助器类来为您进行交叉引用。