【发布时间】:2017-08-09 10:00:17
【问题描述】:
我正在用ERP system 在电话中开发sync adapter 到sync contacts。
在模拟器上一切正常,但在手机上,我获得了附加到“手动”创建的现有联系人的新电话号码。
int rawContactInsertIndex =0;
// Add new items http://techblogon.com/insert-new-contact-in-android-code-example/
for (RestAPIContactParser.Entry e : entryMap.values()) {
rawContactInsertIndex = batch.size();
...
batch.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.SOURCE_ID, e.code)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, ACCOUNT_TYPE)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, ACCOUNT_NAME)
rawContactInsertIndex)
.build());
... batch.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, e.phone)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex)
.build());
当我删除我的帐户联系人时,插入的电话号码也会从现有联系人中删除。 我什至在模拟器上创建了一个新联系人,然后尝试同步,一切都很好,新电话号码没有附加到旧联系人。 有任何想法吗? 编辑:不清楚 RawContacts 表的数据库结构是什么。应该做类似的事情
rawContactInsertIndex =max(ContactsContract.Data.RAW_CONTACT_ID)+1
然后增加 rawContactInsertIndex 而不是 rawContactInsertIndex = batch.size()?
【问题讨论】:
-
我已经手动删除了手机中的所有联系人,然后从备份中导入了.vcf,然后安装了我的同步适配器,问题就消失了。据我了解,我的联系人中有一些孤儿。
标签: android insert contactscontract