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

标签 android

我有一个 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/

相关文章:

java - 解析Android getprop

android - 将自定义小部件样式添加到应用程序主题

java - Android RecyclerView 添加按钮给我错误

java - 安卓 : get id of listview row when button clicked

java - Android 中的 ArrayList 最终

Javascript 到 native Android 调用在 Android 4.2 上不起作用

Android:存储图像的默认位置是什么?

android - PreferenceFragments 不在同一个 FragmentManager 中?

android - 适用于 Android 2.2 的平滑指南针

jquery - JQTouch 在 Android 上导致问题