gpt4 book ai didi

android - 查询联系人的结构化名称返回 null

转载 作者:太空狗 更新时间:2023-10-29 16:16:16 25 4
gpt4 key购买 nike

我有一个 Android 联系人列表,我正在尝试为其检索名字、中间名和姓氏。我能够检索其他信息,包括电子邮件和电话号码,但是当我查询内容解析器以获取联系人的姓名部分时,我总是得到空值作为返回(即使 moveToNext() 正在执行,这意味着从系统中检索到一条记录)。

相关代码:

String id = "Some ID";

// Perform a query to retrieve the contact's name parts
String[] nameProjection = new String[] {
ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME,
ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME,
ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME
};
Cursor nameCursor = mContext.getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
nameProjection,
ContactsContract.CommonDataKinds.StructuredName.CONTACT_ID
+ "=?", new String[] { id }, null);

// Retrieve the name parts
String firstName = "", middleName = "", lastName = "";
if(nameCursor.moveToNext()) {
firstName = nameCursor.getString(nameCursor.getColumnIndex(
ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME));
middleName = nameCursor.getString(nameCursor.getColumnIndex(
ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME));
lastName = nameCursor.getString(nameCursor.getColumnIndex(
ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME));
}

这段代码执行后,字符串为null,但没有抛出异常。我手动检查了几个联系人,他们都填写了名字、中间名和姓氏。

我在这里做错了什么?

最佳答案

我发现我缺少 MIMETYPE 条件,以便从包含名称的聚合表中实际选择行。

我将 nameCursor 更改为:

Cursor nameCursor = mContext.getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
nameProjection,
ContactsContract.Data.MIMETYPE + " = '" +
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE + "' AND " +
ContactsContract.CommonDataKinds.StructuredName.CONTACT_ID
+ " = ?", new String[] { id }, null);

现在它开始工作了:)

关于android - 查询联系人的结构化名称返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26286962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com