我试图通过显示名称查找联系人。目标是打开此联系人并向其中添加更多数据(特别是更多电话号码),但我很难找到要更新的联系人。Android - 通过显示名称查找联系人
这是我使用的代码:
public static String findContact(Context context) {
ContentResolver contentResolver = context.getContentResolver();
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI;
String[] projection = new String[] { PhoneLookup._ID };
String selection = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " = ?";
String[] selectionArguments = { "John Johnson" };
Cursor cursor = contentResolver.query(uri, projection, selection, selectionArguments, null);
if (cursor != null) {
while (cursor.moveToNext()) {
return cursor.getString(0);
}
}
return "John Johnson not found";
}
我有一个名为“约翰·约翰逊”接触,但该方法总是返回“未找到”。我也尝试用一个名字搜索联系人,所以这没有什么区别。
我怀疑它的uri,选择或选择参数有问题,因为我找不到任何搜索具有给定显示名称的联系人的示例,并且它似乎显示名称是一种特殊类型的信息,不同于例如电话号码。
任何想法如何找到约翰逊约翰逊?
更新:我发现了如何找到显示名称联系人:
ContentResolver contentResolver = context.getContentResolver();
Uri uri = Data.CONTENT_URI;
String[] projection = new String[] { PhoneLookup._ID };
String selection = StructuredName.DISPLAY_NAME + " = ?";
String[] selectionArguments = { "John Johnson" };
Cursor cursor = contentResolver.query(uri, projection, selection, selectionArguments, null);
if (cursor != null) {
while (cursor.moveToNext()) {
return cursor.getString(0);
}
}
return "John Johnson not found";
此代码返回与显示名称为“约翰·约翰逊的”第一次接触的接触ID。在我的原始代码中,我的查询中有错误的uri和错误的选择。
感谢回答,但它并没有帮助有空投影。当我搜索电话号码时,相同的代码有效,因此即使我在另一列中搜索匹配,也可以将PhoneLookup._ID用作投影。 如果我正确地理解了它,那么投影就是你想从查询中得到的数据,而不是你要搜索的数据。因此,如果您将投影设置为null,则只需要从您的查询中获取匹配联系人的所有数据即可。 – 2012-03-10 18:58:48