2013-04-19 12 views
5

मैं एप्लिकेशन के अंदर सूची दृश्य में उपयोगकर्ताओं के फोन से संपर्कों की एक सूची दिखाने की कोशिश कर रहा हूं। मैं संपर्क लाने में सक्षम हूं लेकिन कुछ संपर्कों में एकाधिक सेलफोन नंबर होंगे, इसलिए मैं उस व्यक्ति को कई बार दिखाना चाहता हूं।एप्लिकेशन में एंड्रॉइड फ़ेच संपर्क

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(); 

उपयोगकर्ता को संख्याओं की संख्या जितनी बार प्रदर्शित करना चाहते हैं। क्या मैं केवल सेलफोन नंबरों के आधार पर इसे कम सूचीबद्ध करने में सक्षम हूं जो 10 अंकों लंबा है?

Example 

Name: John Doe 
Number 1: xxxxxxxxx 
Number 2: xxxxxxxxx 

Name: Sarah 
Number 1: xxxxxxxxx 

इस तीन सूची आइटम हो लौट चाहिए इस प्रकार के रूप में

John Doe xxxxxxxxx 
John Doe xxxxxxxxx 
Sarah  xxxxxxxxx 
+0

आपका प्रश्न क्या है? – mach

+0

@mach उपयोगकर्ता को संख्याओं की संख्या जितनी बार प्रदर्शित करना चाहते हैं। क्या मैं केवल सेलफोन नंबरों के आधार पर इसे कम सूचीबद्ध करने में सक्षम हूं जो 10 अंकों लंबा है? –

+0

क्या आप ExpandableListView का उपयोग नहीं करना चाहते हैं और संख्याओं को उप-तत्व के रूप में रखना चाहते हैं? – mach

उत्तर

2

आप इस

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; 
    } 
} 
1

की तरह कुछ कोशिश कर सकते हैं नीचे कोड फोन नंबर के साथ सभी संपर्कों को लाने होंगे। वहां डुप्लिकेट हो सकता है क्योंकि एक ही संपर्क अलग-अलग समूह से संबंधित हो सकता है। हालांकि आपको डुप्लिकेट को लूप करना होगा और खत्म करना होगा।

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); 
संबंधित मुद्दे