我在Android 2.0+上遇到了更新/插入联系人的问题.当电话簿为空时插入新联系人没有问题,但是当我第二次这样做时,一些文件如TEL,EMAIL加倍并跳闸等等但是N,FN,ORG都可以(一份).
在获得该论坛的其他成员的建议之后,我首先更新了一个联系人,然后ContentProviderResult []返回了uri的null然后我做了一个插入操作,它没问题但是之后我做了一个更新,所有的联系人聚合成一个 - 我得到了1个电话簿中存在的联系人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());
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案有什么问题?工作聚合引擎如何?
我很乐意帮忙.
虚假
我遇到了同样的问题。我认为它应该以这种方式工作
opt.add(ContentProviderOperation.newUpdate(ContactsContract.Contacts.CONTENT_URI)
.withSelection(ContactsContract.Contacts._ID, new String[]{entity.getPeople()})
.withValue(ContactsContract.Contacts.DISPLAY_NAME, "daerba")
.build()
);
Run Code Online (Sandbox Code Playgroud)
但它出错了并报告了这一点。
android.database.sqlite.SQLiteException:绑定或列索引超出范围
我认为必须有一个选择来更新联系人。因此 withSelection 非常重要,可以告诉 ContentResolver 要更新哪个联系人。
希望这可以提供一些线索。
| 归档时间: |
|
| 查看次数: |
13144 次 |
| 最近记录: |