Android не добавляет все контакты с повторяющимися полями - PullRequest
0 голосов
/ 14 ноября 2010

У меня БОЛЬШАЯ двойка при добавлении дубликатов полей контактов в Android 2.1, обновление 1

, пожалуйста, посмотрите на мой код:

      ArrayList<ContentProviderOperation> op_list = new ArrayList<ContentProviderOperation>();

  op_list.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
         .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
         .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
         .build());

  // first and last names
       op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
   .withValueBackReference(Data.RAW_CONTACT_ID, 0)
         .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
         .withValue(StructuredName.GIVEN_NAME, "MyFirstName")
         .withValue(StructuredName.FAMILY_NAME, "MyLastName")
         .build());

  try{
   ContentProviderResult[] results = cResolver.applyBatch(ContactsContract.AUTHORITY, op_list);
  }catch(Exception e){
   e.printStackTrace();
  }

Попробуйте запустить этот кусок кодав цикле 20 итераций, затем перейдите в приложение контактов, там вы увидите только 8 контактов!Эта проблема возникает, когда также, когда я вставляю дубликаты электронных писем, телефонов, организаций.Попробуйте это в цикле от 0-> 200, android сойдет с ума!

есть ли проблема в моем коде?Есть ли какое-либо решение для этого?

любая помощь будет очень признателен ... Спасибо!

Ответы [ 3 ]

9 голосов
/ 14 ноября 2010

Через 2 дня без сна ... перечитать мой код и переписать мои уроки Я нашел решение этой проблемы: есть столбец, о котором я не знал, и он даже не существовал в более ранних API, называемый: AGGREGATION_MODE

так что решение оказалось таким:

    ArrayList<ContentProviderOperation> op_list = new ArrayList<ContentProviderOperation>();
         op_list.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
             .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
             .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
             .withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DISABLED)

             .build());

      // first and last names
           op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
       .withValueBackReference(Data.RAW_CONTACT_ID, 0)
             .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
             .withValue(StructuredName.GIVEN_NAME, "MyFirstName")
             .withValue(StructuredName.FAMILY_NAME, "MyLastName")
             .build());

      try{
       ContentProviderResult[] results = cResolver.applyBatch(ContactsContract.AUTHORITY, op_list);
      }catch(Exception e){
       e.printStackTrace();
      }
1 голос
/ 19 ноября 2010

Контакты объединены в новый API (SDK> 2.0).

Все контакты, попадающие в определенный набор правил, автоматически объединяются для отображения одного контакта в списке контактов.

В набор правил входит 1. Контакты, имеющие одинаковые имя и фамилию. 2. Контакты, имеющие одинаковый почтовый идентификатор. 3. Контакт, имеющий имя и соответствующий номер телефона ... и т. Д.

На экране «Показать контактные данные» дубликаты не отображаются. Если вы попытаетесь изменить контакт, вы найдете все экземпляры контакта, которые вы ввели. (т.е. если контакт введен 10 раз, то один за другим видны 10 разных экземпляров.) Вы можете редактировать любой конкретный контакт там.

Поскольку Android 2.0 поддерживает несколько учетных записей, этот сценарий существует.

0 голосов
/ 14 ноября 2010

Вы должны попробовать с прямой вставкой с ContentResolver, возможно, это поможет (я не пытался вставить 20 раз один и тот же контакт, поэтому я не знаю, будет ли это иметь какое-либо значение)

...