显示一个具有多个号码的联系人姓名

时间:2013-06-20 01:32:21

标签: java android android-contacts

我正在尝试从手机中检索只有数字的联系人并将它们放入arrayList中,在懒惰的适配器中查看它们,点击名称我只想显示数字。我设法获得了联系人和号码列表,但问题是当我有多个号码的联系人时,它只是加入到列表中。

类似于例如

大卫+1 508 656 9043

大卫+1 403 604 7053

大卫+1 212 608 7053

相反,我想在列表中仅显示David,当我点击它时应显示所有三个数字。

我试过了:

  void getContactNumbers()
 {
    ContentResolver cr = getContentResolver();
     String sortOrder = ContactsContract.Contacts.DISPLAY_NAME+ " COLLATE LOCALIZED ASC";
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, sortOrder);
    if (cur.getCount() > 0) 
     {
        while (cur.moveToNext()) 
        {
              String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
              String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

              Log.e("contact", "...Contact Name ...." + name);
              if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
               {
                 Cursor pCur = cr.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));
                     Log.e("contact", "...Contact Name ...." + name + "...contact Number..." + phoneNo);
                 }

                 pCur.close();
            }
        }
    }
}

如何解决这一部分?

谢谢!

2 个答案:

答案 0 :(得分:3)

谢谢Harshid。选择更改而不是IN_VISIBLE_GROUP +“='1'”; - 我添加了HAS_PHONE_NUMBER +“='1'”;

所有联系人都出现了..希望以下代码可以帮助其他人!

谢谢!

      final Uri uri = ContactsContract.Contacts.CONTENT_URI;
    final String[] projection = new String[] {
            ContactsContract.Contacts._ID,
            ContactsContract.Contacts.DISPLAY_NAME,
            ContactsContract.Contacts.PHOTO_ID
    };

    String selection  = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = '1'";
    final String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
    Cursor cur = getContentResolver().query(uri, projection, selection,  null, sortOrder);


    if (cur.getCount() > 0) 
    {
        while (cur.moveToNext()) 
        {
            String Sid = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
            String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

        Log.e("contact", "...Contact Name ...." + name);
           // get the phone number
            Cursor pCur = getApplicationContext().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));
                }
         pCur.close();

    }
    }
    cur.close(); 

答案 1 :(得分:-1)

您必须这样查询并get contactmultiple number

final Uri uri = ContactsContract.Contacts.CONTENT_URI;
            final String[] projection = new String[] {
                    ContactsContract.Contacts._ID,
                    ContactsContract.Contacts.DISPLAY_NAME,
                    ContactsContract.Contacts.PHOTO_URI
            };

            String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
            String[] selectionArgs = null;
            final String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
            Cursor cur = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);

    if (cur.getCount() > 0) 
    {
        while (cur.moveToNext()) 
        {
              String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
              String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

              Log.e("contact", "...Contact Name ...." + name);
               // get the phone number
                Cursor pCur = getApplicationContext().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));
                    }
             pCur.close();

        }
    }
    cur.close();

如果getting error请尝试此代码,然后将评论另外享受..