Android 查询联系人的结构化名称将返回null

Android 查询联系人的结构化名称将返回null,android,Android,我有一个Android联系人列表,我正在尝试检索这些联系人的名字、中间名和姓氏。我可以检索其他信息,包括电子邮件和电话号码,但当我查询内容解析程序中联系人的姓名部分时,即使moveToNext正在执行,我也总是会得到空值,这意味着从系统中检索到一条记录 相关代码: String id = "Some ID"; // Perform a query to retrieve the contact's name parts String[] nameProjection = new String[

我有一个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条件,以便从包含名称的聚合表中实际选择行

我将名称光标更改为:

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);
现在它开始工作了: