Я пытаюсь получить номера телефонов из моего сырого контакта по типу аккаунта. Используя ниже фрагмент кода,Получение контакта PHONE.CONTENT_URI возвращает повторяющиеся строки
String SELECTION =
ContactsContract.RawContacts.ACCOUNT_TYPE + "='" + Constants.ACCOUNT_TYPE + "'";
ContentResolver cr = this.getContentResolver();
Cursor cur = cr.query(ContactsContract.RawContacts.CONTENT_URI,
null, SELECTION, null, ContactsContract.Contacts.DISPLAY_NAME + " ASC");
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String type = cur.getString(cur.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
//String phone = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.e("number",name);
// hasPhoneNumber(cur.getString(cur.getColumnIndex(ContactsContract.RawContacts._ID)));
}
cur.close();
}
Я мог бы получить все контакты привязанной к типу счета, но, hasPhoneNumber (String ContactId) возвращает пустой указатель.
private boolean hasPhoneNumber(String id) {
Cursor pCur = this.getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[]{id}, null);
while (pCur.moveToNext()) {
String phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
phoneNo = phoneNo.replace(" ", "");
if (Integer.parseInt(pCur.getString(
pCur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Log.e("search", "found phone number");
pCur.close();
return true;
}
pCur.close();
}
return false;
}
Однако, я решил выполнить мой запрос с PHONE.CONTENT_URL как:
String SELECTION =
ContactsContract.RawContacts.ACCOUNT_TYPE + "='" + Constants.ACCOUNT_TYPE + "'";
ContentResolver cr = this.getContentResolver();
Cursor cur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, SELECTION, null, ContactsContract.Contacts.DISPLAY_NAME + " ASC");
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String type = cur.getString(cur.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String phone = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.e("number",phone);
// hasPhoneNumber(cur.getString(cur.getColumnIndex(ContactsContract.RawContacts._ID)));
}
cur.close();
}
Это работает, как ожидается, кроме того, что у меня есть только три контакт, который соответствует такому запросу в моем списке контактов, но время цикл работает 6 раз, показывая каждый номер дважды. Как лучше всего это реализовать и что я делаю неправильно?
Это, вероятно, ошибка, но это не связано с тем, как вы запрашиваете данные. Это больше связано с Google. Если вы попытаетесь открыть приложение Lollipop Messenger, вы увидите строки дубликатов в разделе «новое сообщение». Я также пытаюсь решить это, кстати, – Matteo