使用CursorLoader获取联系人会导致重复

Ste*_*hen 1 android cursor

我正在建立一个活动,我希望填充有电话号码的联系人.

我没有使用Intent,因为我希望在listview中的每个联系人之前都有一个复选框.

我正在使用CursorLoader.以下是onCreateLoader方法的一些代码;

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

    String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1" + 
    " AND " + ContactsContract.Contacts.IN_VISIBLE_GROUP + " =1";

    String order = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

    CursorLoader loader = new CursorLoader(this, uri, projection, selection, null, order);
Run Code Online (Sandbox Code Playgroud)

我在我的ListView中使用了ResourceCursorAdapter的子类.

有没有人有任何想法我如何删除重复?除非我真的需要,否则我不想使用Set.

Dev*_*red 5

我建议查询Contacts表而不是原始Data表.

Uri uri = ContactsContract.Contacts.CONTENT_URI;
Run Code Online (Sandbox Code Playgroud)

数据表包含原始联系人数据,这可能意味着同一"人"的多个条目,因为Android联系人是从多个不同的帐户来源汇总的.其他一切看起来都不错.

  • 如果"联系人"表中的字段不可用怎么办?例如,我需要获取所有联系人的名称和姓氏,来自联系人的查询是不够的 (2认同)