Используя ContentProviderOperation, чтобы обновить и вставить контакты

Я столкнулся с проблемой updating/insertng контакты на Android 2.0 +. Нет никакой проблемы для вставки нового контакта, когда телефонная книга пуста, но когда я сделал это в 2-й раз некоторые поля как ТЕЛЕФОН, ЭЛЕКТРОННАЯ ПОЧТА удвоена и сместилась и т.д., но N, FN, ORG в порядке (одна копия).

После получения и совета другого участника этот форум я обновил контакт сначала, и затем ContentProviderResult [] возвратил uri с пустым указателем затем, я делаю действие вставки, и это пошло хорошо, но после этого я сделал обновление, и все контакты агрегированы в один - я получил 1 insted 3 контакта, который существовал в телефонной книге. Этот был поврежден, поля контакта случайным образом создаются.

Я установил учетную запись Google.

Код:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
  ops.add(ContentProviderOperation.newUpdate(ContactsContract.RawContacts.CONTENT_URI)
    .withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DISABLED)
    .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, accountType)
    .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, accountName)
    .build()); 

// add name
ContentProviderOperation.Builder builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI);
   builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);
   builder.withValue(ContactsContract.Data.MIMETYPE,
     ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
builder.withValue(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_FAMILY_NAME, name);

// phones
ContentProviderOperation.Builder builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI);
   builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);
   builder.withValue(ContactsContract.Data.MIMETYPE,
     ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
   builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneValue);
   builder.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, phoneType);
   builder.withValue(ContactsContract.CommonDataKinds.Phone.LABEL, phoneLabel);         
   ops.add(builder.build());

// emails ...
// orgs ...

try {

  ContentProviderResult[]  result = mContentResolver.applyBatch(ContactsContract.AUTHORITY, ops);   
 }
  } catch (Exception e) {
   Log.e(LOG_TAG, "Exception while contact updating: " + e.getMessage());
  }

Что не так в этом решении? Как действительно работает механизм агрегирования?

Я буду радоваться за справку.

Поддельный

9
задан Pentium10 2 June 2010 в 10:20
поделиться