1

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

像这样的东西

大卫 +1 508 656 9043

大卫 +1 403 604 7053

大卫 +1 212 608 7053

相反,我只想在列表中显示大卫,当我单击它时,它应该显示所有三个数字。

我试过这个:

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

这部分怎么解决?

谢谢!

4

2 回答 2

3

谢谢哈希德。有选择更改而不是 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(); 
于 2013-06-21T13:16:11.173 回答
-1

您必须以这种方式查询和get contact使用multiple 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否则请享受..

于 2013-06-20T04:46:17.863 回答