I'm using the code below to read contacts with phone number and email! It reads all contacts successfully but if you contact has no email, it displays the previous contact's email.
just as the picture below! Any ideas?? Thank you in advance
public void getContacts() {
contactList = new ArrayList<Contacts>();
String phoneNumber = null;
String email = null;
ContentResolver contentResolver = getContentResolver();
String name = null;
cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
// Iterate every contact in the phone
if (cursor.getCount() > 0) {
counter = 0;
while (cursor.moveToNext()) {
// Update the progress message
updateBarHandler.post(new Runnable() {
public void run() {
pDialog.setMessage("Reading contacts : " + counter++ + "/" + cursor.getCount());
}
});
String contact_id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
int hasPhoneNumber = Integer.parseInt(cursor.getString(
cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));
if (hasPhoneNumber > 0) {
//This is to read multiple phone numbers associated with the same contact
Cursor phoneCursor = contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[]{contact_id}, null);
while (phoneCursor.moveToNext()) {
phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER));
}
phoneCursor.close();
}
Cursor emailCursor = contentResolver.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID
+ " = ?", new String[]{contact_id}, null);
while (emailCursor.moveToNext()) {
email = emailCursor.getString(emailCursor.getColumnIndex(
ContactsContract.CommonDataKinds.Email.DATA));
}
emailCursor.close();
contact = new Contacts();
contact.setContactFName(name);
contact.setContactPhone(phoneNumber);
contact.setContactEmail(email);
contactList.add(contact);
}
// ListView has to be updated using a ui thread
runOnUiThread(new Runnable() {
@Override
public void run() {
adapter = new ImportContactAdapter
(ImportContactActivity.this, R.layout.custom_import_contact, contactList);
mListView.setAdapter(adapter);
}
});
// Dismiss the progressbar after 500 millisecondds
updateBarHandler.postDelayed(new Runnable() {
@Override
public void run() {
pDialog.cancel();
}
}, 500);
}
}