我有一个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));
}
Run Code Online (Sandbox Code Playgroud)
执行此代码后,字符串为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);
Run Code Online (Sandbox Code Playgroud)
现在它正在工作:)
| 归档时间: |
|
| 查看次数: |
928 次 |
| 最近记录: |