0

エミュレーターに2つのテスト連絡先を設定しました。

次のクエリを実行しています。両方を選択し、ドメインオブジェクトにデータを入力して、リストに追加する必要があります。したがって、下部の出力は2になるはずですが、5です。これはなぜですか。(cursor.getCount()は2ではなく5です)

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

3 に答える 3

2

API 21の後、連絡先の重複を削除するためにこのクエリを記述します。

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);
于 2019-05-04T04:58:21.750 に答える
1

電話番号や郵便番号などのさまざまな連絡先の詳細のリストを保持する汎用コンテナであるContactsContract.Dataをクエリしています。ContactsContract.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を参照してください

于 2010-08-28T15:33:32.597 に答える
0

複数のグループに登録されている連絡先は、クエリを実行すると複数回表示されます Uri CONTENT_URI = ContactsContract.Data.CONTENT_URI

これを選択に追加します。

 + ContactsContract.Data.DATA1 + " = 1 " ;  //show only contacts in group 1
于 2017-08-02T10:44:30.213 に答える