Ваш код немного странный, вы правильно используете неявное объединение, которое получаете, запрашивая таблицу Phone.CONTENT_URI
(см. https://developer.android.com/reference/android/provider/ContactsContract.Data#columns), но имена полей кажутся немного не такими.
Обратите внимание, что при запросе непосредственно к таблице Phone.CONTENT_URI
вам не нужно проверять HAS_PHONE_NUMBER
, так как вы запрашиваете строки, содержащие информацию о телефоне.
Вот, возможно, фиксированный код:
String[] projection = new String[]{Phone.DISPLAY_NAME, Phone.NUMBER, Phone.CONTACT_ID};
Cursor cursor = getContentResolver().query(Phone.CONTENT_URI, projection, null, null, Phone.DISPLAY_NAME);
ArrayList<FmAddress> contactlist = new ArrayList<>();
while (cursor.moveToNext()) {
String name = cursor.getString(0);
String phoneNumber = cursor.getString(1);
long contactId = cursor.getLong(2);
Log.i("Phones", contactId + ", " + name + ", " + phoneNumber);
if (name != null && phoneNumber != null) {
String phoneNumber1 = phoneNumber.replaceAll("[^0-9]", "");
FmAddress acontact = new FmAddress();
acontact.uid = contactId;
acontact.phonenum = phoneNumber1;
acontact.name = name;
contactlist.add(acontact);
}
}
cursor.close();