1.以下面的方式添加联系人,添加多条DISPLAY_NAME相同的联系人时,会合并显示成一条,并且在编辑的的时候会有异常。
ContentValues values=new ContentValues();
Uri uri=this.getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values);
long rawContactId=ContentUris.parseId(uri);
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
values.put(StructuredName.DISPLAY_NAME, "test");getContentResolver().insert(Data.CONTENT_URI, values);
2.四条DISPLAY_NAME为test的联系人,在Android2.2模拟的通讯录里显示成一条记录
3.编辑该条记录时,会出现以下异常
4.异常的详细信息如下:
5.用sqlite查看表contacts、raw_contacts、data的数据如下:
contacts表
raw_contacts表
data表
疑问:raw_contacts中的四条记录是如何合并成一条的?合并成一条后,为什么编辑时会出现以上的那些异常信息?
6.以官方例子ContactManager 所用的方式来添加联系人,则在通讯录中DISPLAY_NAME没有显示。
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.build());
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "test")
.build());
// Ask the Contact provider to create a new contact
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
// Log exception
Log.e(TAG, "Exceptoin encoutered while inserting contact: " + e);
}
对比官方ContactManager这个例子,它多了一下两句。
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, mSelectedAccount.getType())
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, mSelectedAccount.getName())
问题:Account与DISPLAY_NAME为空有什么关系?