Я написал следующую функцию для извлечения одного телефонного номера, который принадлежит контакту с идентификатором «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".Почему это так?Что не так?
Редактировать: Я использовал для сопоставления Contacts._ID с CommonDataKinds.Phone.CONTACT_ID - который не работал.Но теперь я сопоставляю Contacts.DISPLAY_NAME с CommonDataKinds.Phone.DISPLAY_NAME, и он работает внезапно - странно, не правда ли?Но я бы предпочел отобразить идентификаторы вместо отображаемых имен.Так что вопрос все еще актуален.Может ли это быть из-за разных идентификаторов в этих таблицах?Разве не для этого есть идентификаторы поиска?