代码之家  ›  专栏  ›  技术社区  ›  Jimmy

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

  •  0
  • Jimmy  · 技术社区  · 15 年前

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

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

    我已经完成了while循环的每个迭代,它多次重试同一个联系人,但对 POSTCODE ,例如电话号码

    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());
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   Thorstenvv    15 年前

    您正在查询contactsControl.data,它是一个通用容器,包含各种联系人详细信息的列表,如电话号码、邮政编码等。必须筛选contactsControl.data.mimetype列等于structuredpostal.content_item_type的行的结果:

    因此,将查询更改为:

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

    ContactsContract.Data

        2
  •  0
  •   Dan Alboteanu    8 年前

    注册到多个组的联系人将出现多次 如果您查询 Uri CONTENT_URI = ContactsContract.Data.CONTENT_URI

    将此添加到您的选择:

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