Ich habe die folgende Funktion geschrieben, um eine einzige Telefonnummer abzurufen, die zu dem Kontakt mit der ID "contactID" gehört.
Die Funktion, um die Telefonnummer abzurufen:
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;
}
Wie diese Funktion aufgerufen wird:
ArrayList resultContacts = new ArrayList();
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));
...
}
...
Leider funktioniert es nicht. Ich erhalte null, wenn ich diese Funktion mit dem Wert aufrufe, den ich von "ContactsContract.Contacts._ID" erhalten habe. Warum ist das so? Was ist falsch?
Bearbeiten: Ich habe Contacts._ID früher mit CommonDataKinds.Phone.CONTACT_ID verknüpft - was nicht funktioniert hat. Aber jetzt verknüpfe ich Contacts.DISPLAY_NAME mit CommonDataKinds.Phone.DISPLAY_NAME und plötzlich funktioniert es - merkwürdig, nicht wahr? Aber ich würde lieber die IDs anstatt der Anzeigenamen verknüpfen. Die Frage ist also immer noch relevant. Könnte das an unterschiedlichen IDs in diesen Tabellen liegen? Liegt es nicht daran, dass es Lookup-IDs gibt?