【发布时间】:2012-02-02 20:59:51
【问题描述】:
我编写了以下函数来检索属于 id 为“contactID”的联系人的一个电话号码。
获取电话号码的功能:
private String getContactPhone(String contactID) {
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] projection = null;
String where = ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?";
String[] selectionArgs = new String[] { contactID };
String sortOrder = null;
Cursor result = managedQuery(uri, projection, where, selectionArgs, sortOrder);
if (result.moveToFirst()) {
String phone = result.getString(result.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
if (phone == null) {
result.close();
return null;
}
result.close();
return phone;
}
result.close();
return null;
}
如何调用此函数:
ArrayList<Contact> resultContacts = new ArrayList<Contact>();
Cursor result = null;
Uri uri = ContactsContract.Data.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Event.CONTACT_ID,
ContactsContract.CommonDataKinds.Event.START_DATE,
};
String where = ContactsContract.Data.MIMETYPE+" = ? AND "+ContactsContract.CommonDataKinds.Event.TYPE+" = "+ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY;
String[] selectionArgs = new String[] {ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE};
String sortOrder = null;
result = managedQuery(uri, projection, where, selectionArgs, sortOrder);
while (result.moveToNext()) {
Long id = result.getLong(result.getColumnIndex(ContactsContract.Contacts._ID));
String phone = getContactPhone(String.valueOf(id));
...
}
...
不幸的是,它不起作用。如果我使用从“ContactsContract.Contacts._ID”获得的值调用此函数,我会得到 null。为什么会这样?怎么了?
编辑:我曾经将 Contacts._ID 映射到 CommonDataKinds.Phone.CONTACT_ID - 这不起作用。但是现在我将 Contacts.DISPLAY_NAME 映射到 CommonDataKinds.Phone.DISPLAY_NAME 并且它突然工作了 - 很奇怪,不是吗?但我宁愿映射 ID 而不是显示名称。所以这个问题仍然是热门话题。这可能是由于这些表中的不同 ID 造成的吗?这不就是有查找 ID 的原因吗?
【问题讨论】:
-
你确认你只有一个联系人吗?
-
是的,因为我在遍历第一个查询的结果光标时尝试获取每个联系人的电话号码。如果我有两个联系人,这也不适用于显示名称,不是吗?
-
您能否展示一下您是如何获得
contactId的,以便我自己尝试一下? -
当然可以。我在上面的问题中添加了细节。感谢您的努力!
标签: java android android-contacts phone-number