I have to display contact name and number in recycler view. But, the sorting order should be by address which means that if a contact has address saved with it, then it should be displayed in first place in recycler view, then followed by the contacts which don't have addresses. All the code is working. I don't know how to sort by address and then display it in recycler view.
Code is: public void getContactList() {
Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME;
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(phoneUri, null, null, null, sortOrder);
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
contact= new Contact();
contact.setName(cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)));
contact.setNumber(cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)));
contact.setContactId(cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Data.CONTACT_ID)));
contact.setAddresses(getAddressesByContactId(contact.getContactId()));
contactList.add(contact);
}
}
cursor.close();
setContactsRecyclerView();
}
private ArrayList getAddressesByContactId(long contactId) {
Uri addressUri = ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI;
String sortOrder = ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS;
String addressSelection = ContactsContract.Data.CONTACT_ID + "=" + contactId;
Cursor addressCursor = getContentResolver().query(addressUri, null, addressSelection, null, sortOrder);
ArrayList<String> addresses = new ArrayList<>();
if (addressCursor.getCount() >0) {
while (addressCursor.moveToNext()) {
addresses.add(addressCursor.getString(addressCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS)));
}
}
addressCursor.close();
return addresses;
}
private void setContactsRecyclerView() {
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerViewAdapter = new RecyclerViewAdapter(this, contactList);
recyclerView.setAdapter(recyclerViewAdapter);
}