Próbuję znaleźć kontakt według wyświetlanej nazwy. Celem jest otwarcie tego kontaktu i dodanie do niego więcej danych (w szczególności więcej numerów telefonów), ale staram się znaleźć kontakt, który chcę zaktualizować.Android - Znajdź kontakt według wyświetlanej nazwy
Jest to kod używam:
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";
}
mam kontaktu o nazwie „John Johnson”, ale metoda zawsze zwraca „nie znaleziono”. Próbowałem także wyszukać kontakt z tylko jedną nazwą, więc nie ma znaczenia.
Podejrzewam, że jest coś nie tak z argumentami o uri, selekcji lub selekcji, ponieważ nie mogłem znaleźć żadnego przykładu wyszukiwania kontaktów z daną nazwą wyświetlaną i wydaje się, że nazwa wyświetlana jest specjalnym rodzajem informacji, różni się na przykład od numeru telefonu.
Jakieś pomysły, w jaki sposób mogę znaleźć Johna Johnsona?
UPDATE: Znalazłem się, jak znaleźć kontakt według nazwy wyświetlacza:
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";
Ten kod zwraca id styku pierwszego kontaktu z wyświetlanej nazwy „John Johnson”. W moim oryginalnym kodzie miałem błędne wybranie URI i niewłaściwą opcję w moim zapytaniu.
Dzięki za odpowiedzi, ale to nie pomogło mieć zerową projekcję. Ten sam kod działa, gdy szukam numeru telefonu, więc możliwe jest posiadanie PhoneLookup._ID jako projekcji, nawet jeśli szukam dopasowania w innej kolumnie. Jeśli dobrze zrozumiałem, projekcja to dane, które chcesz odzyskać z zapytania, a nie to, czego szukasz. Jeśli więc ustawisz projekcję na null, po prostu prosisz o uzyskanie wszystkich danych z pasujących kontaktów, które otrzymujesz z zapytania. –