Reputation: 54949
I am trying to show a list of Contacts from the users phone in a List view inside the application. I am able to fetch the contacts but some of the Contacts will have mutiple cellphone numbers so i want to show that person that many number of times.
Cursor c = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
String name, number = "";
String id;
c.moveToFirst();
for (int i = 0; i < c.getCount(); i++) {
name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));
if (Integer.parseInt(c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id },
null);
while (pCur.moveToNext()) {
number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
}
Log.i("name ", name + " ");
Log.i("number ", number + " ");
c.moveToNext();
Want to Display a user as many times as the number of numbers he has. Will i be even able to short list it based of only cellphone numbers which is 10 digit long ?
Example
Name: John Doe
Number 1: xxxxxxxxx
Number 2: xxxxxxxxx
Name: Sarah
Number 1: xxxxxxxxx
This should return be three List Items as Follows
John Doe xxxxxxxxx
John Doe xxxxxxxxx
Sarah xxxxxxxxx
Upvotes: 5
Views: 1013
Reputation: 18151
The code below will fetch all contacts with phone numbers. There maybe duplicate because the same contact may belong to different group. You have to loop though and eliminate the duplicate.
String[] projection = new String[]{ ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,};
String selection = ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER + "=?" ;
String[] selectionArgs = new String[] {"1"};
Cursor c = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
projection,
selection,
selectionArgs,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
+ ", " + ContactsContract.CommonDataKinds.Phone.NUMBER);
Upvotes: 1
Reputation: 8395
You might try something like this
List<PhoneItem> phoneNoList = new ArrayList<PhoneItem();
Cursor c = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
String name, number = "";
String id;
c.moveToFirst();
for (int i = 0; i < c.getCount(); i++) {
name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));
if (Integer.parseInt(c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id },
null);
while (pCur.moveToNext()) {
phoneNoList.add(new PhoneItem(name, pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))));
}
}
c.moveToNext();
}
for (PhoneItem row : phoneNoList) {
Log.i("name", row.name);
Log.i("number", row.number+"");
}
[...]
private class PhoneItem {
String name;
String phone;
public PhoneItem(String name, String phone) {
this.name = name;
this.phone = phone;
}
}
Upvotes: 2