首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何连接具有不同CONTENT_ITEM_TYPE但共享一个公共字段(即RAW_CONTACT_ID )的记录?

如何连接具有不同CONTENT_ITEM_TYPE但共享一个公共字段(即RAW_CONTACT_ID )的记录?
EN

Stack Overflow用户
提问于 2019-06-15 21:33:24
回答 1查看 34关注 0票数 0

我需要一个选择属于特定组的联系人按其家族名称排序(而不是display_names)的Cursor

很容易让一个光标返回属于所请求的组的联系人,另一个光标返回按姓氏排序的联系人。但是,家族名称属于带有ContactsContract.Data.MIMETYPE = ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE的数据记录,而属于特定组的联系人将在带有ContactsContract.Data.MIMETYPE = ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE的记录中找到。

如何连接具有不同CONTENT_ITEM_TYPE但共享一个公共字段(即RAW_CONTACT_ID )的记录

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-24 16:35:33

你说你需要选择联系人,如果是这样的话,你不应该使用RAW_CONTACT_ID,而是CONTACT_ID来加入你的联系人数据。单个联系人可能是多个RawContacts的聚合,在这种情况下,我假设您希望将该单个联系人的所有详细信息作为一行。

现在为了得到你想要的,你不能使用游标来遍历联系人,相反,你应该将你需要的所有数据加载到内存中(例如HashMap)并运行它。

顺便说一句,如果您更喜欢查询Contacts/RawContacts表而不是Data表,您可以使用DISPLAY_NAME_ALTERNATIVE列来进行排序,请参阅:https://developer.android.com/reference/android/provider/ContactsContract.ContactNameColumns.html#DISPLAY_NAME_ALTERNATIVE

示例代码:

代码语言:javascript
复制
int selectedGroupId = 12345;
HashSet<Long> ids = new HashSet<>();

// get all CONTACT_IDs belonging to some GROUP_ID
String[] projection = new String[]{Data.CONTACT_ID};
String selection = Data.MIMETYPE + "='" + GroupMembership.CONTENT_ITEM_TYPE + "' AND " + GroupMembership.GROUP_ROW_ID + "=" + selectedGroupId;
Cursor c = getContentResolver().query(Data.CONTENT_URI, projection, selection, null, null);
while (c.moveToNext()) {
    ids.add(c.getLong(0));
}
c.close();

String[] projection = new String[]{Data.DISPLAY_NAME, Data.MIMETYPE, Data.DATA1};
// you can add more MIMETYPES to the selection here to get phones, emails, etc. for each contact
String selection = Data.CONTACT_ID + " IN (" + TextUtils.join(",", ids) + ") AND " + Data.MIMETYPE + "='" + StructuredName.CONTENT_ITEM_TYPE + "'";
c = getContentResolver().query(Data.CONTENT_URI, projection, selection, null, StructuredName.FAMILY_NAME + " ASC");
DatabaseUtils.dumpCursor(c);
c.close();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56610836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档