Android 安卓我只有2个联系人,但我可以从查询中获得5个,为什么?

Android 安卓我只有2个联系人,但我可以从查询中获得5个,为什么?,android,cursor,contacts,android-2.2-froyo,Android,Cursor,Contacts,Android 2.2 Froyo,我在模拟器中设置了2个测试联系人 我正在运行以下查询,它应该将它们都挑出来,填充我的域对象,并添加到列表中。因此,底部的输出应该是2,但它是5,这是为什么?(cursor.getCount()是5而不是2) 我已经完成了while循环的每次迭代,它会多次重述同一联系人,但使用不同的邮政编码值,例如电话号码 ContentResolver cr = getContentResolver(); Cursor cursor = cr.query(ContactsContract.Dat

我在模拟器中设置了2个测试联系人

我正在运行以下查询,它应该将它们都挑出来,填充我的域对象,并添加到列表中。因此,底部的输出应该是2,但它是5,这是为什么?(cursor.getCount()是5而不是2)

我已经完成了while循环的每次迭代,它会多次重述同一联系人,但使用不同的
邮政编码值,例如电话号码

ContentResolver cr = getContentResolver();
        Cursor cursor = cr.query(ContactsContract.Data.CONTENT_URI,
                null, null, null, null);
        List<MeCercanaContact> contacts = new ArrayList<MeCercanaContact>();
        if (cursor.getCount() > 0)
        {
            while (cursor.moveToNext())
            {
                MyContact myContact = new MyContact();
                String givenName = cursor.getString(cursor.getColumnIndex(
                        ContactsContract.Contacts.DISPLAY_NAME));
                String postcode = cursor.getString(cursor.getColumnIndex(
                        ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
                myContact.setFirstName(givenName);
                myContact.setLastName(postcode);
                contacts.add(myContact);
            }
        }
        System.out.println(contacts.size());
ContentResolver cr=getContentResolver();
Cursor Cursor=cr.query(contacts contract.Data.CONTENT\u URI,
空,空,空,空);
列表联系人=新建ArrayList();
if(cursor.getCount()>0)
{
while(cursor.moveToNext())
{
MyContact MyContact=新的MyContact();
String givenName=cursor.getString(cursor.getColumnIndex(
Contacts contract.Contacts.DISPLAY_NAME));
字符串邮编=cursor.getString(cursor.getColumnIndex(
Contacts contract.CommonDataTypes.StructuredPostal.POSTCODE));
myContact.setFirstName(givenName);
myContact.setLastName(邮政编码);
contacts.add(myContact);
}
}
System.out.println(contacts.size());

您正在查询ContactsContract.Data,它是一个通用容器,包含各种联系人详细信息的列表,如电话号码、邮政编码等。。必须筛选ContactsContract.Data.MIMETYPE列等于StructuredPostal.CONTENT\u ITEM\u TYPE的行的结果:

因此,将查询更改为:

Cursor cursor = cr.query(ContactsContract.Data.CONTENT_URI,
     null, null, ContacsContract.Data.MIMETYPE +  "='" + 
ContactsContract.StructuredPostal.CONTENT_ITEM_TYPE + "'", null);

请参见

您正在查询contacts contract.Data,它是一个通用容器,包含各种联系人详细信息的列表,如电话号码、邮政编码等。。必须筛选ContactsContract.Data.MIMETYPE列等于StructuredPostal.CONTENT\u ITEM\u TYPE的行的结果:

因此,将查询更改为:

Cursor cursor = cr.query(ContactsContract.Data.CONTENT_URI,
     null, null, ContacsContract.Data.MIMETYPE +  "='" + 
ContactsContract.StructuredPostal.CONTENT_ITEM_TYPE + "'", null);

请参见

注册到多个组的联系人将显示多次 如果查询
Uri CONTENT\u Uri=contacts contract.Data.CONTENT\u Uri

将此项添加到您的选择中:

 + ContactsContract.Data.DATA1 + " = 1 " ;  //show only contacts in group 1

注册到多个组的联系人将显示多次 如果查询
Uri CONTENT\u Uri=contacts contract.Data.CONTENT\u Uri

将此项添加到您的选择中:

 + ContactsContract.Data.DATA1 + " = 1 " ;  //show only contacts in group 1

在API 21之后,我们为remove contact duplicacy编写这个查询

String select = ContactsContract.Data.HAS_PHONE_NUMBER + " != 0 AND " + 
ContactsContract.Data.MIMETYPE
                + " = " + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + " 
AND "+ ContactsContract.Data.RAW_CONTACT_ID + " = " + 
ContactsContract.Data.NAME_RAW_CONTACT_ID;

Cursor cursor = mContent.query(ContactsContract.Data.CONTENT_URI, null, select, 
 null, null);

在API 21之后,我们为remove contact duplicacy编写这个查询

String select = ContactsContract.Data.HAS_PHONE_NUMBER + " != 0 AND " + 
ContactsContract.Data.MIMETYPE
                + " = " + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + " 
AND "+ ContactsContract.Data.RAW_CONTACT_ID + " = " + 
ContactsContract.Data.NAME_RAW_CONTACT_ID;

Cursor cursor = mContent.query(ContactsContract.Data.CONTENT_URI, null, select, 
 null, null);