我把从数据库获得的数据逐条添加到手机中,但是遇到相同的名字(即使名和姓分开不同,连起来相同)就会自动的添加到一个下边,但还是两条记录,有人遇到过这种情况吗,我想让它们分开,每次遇见一个名字就添加一条新的记录,该怎样解决呢
我现在的代码是这样的
for (int i = 0; i < contactList.size(); i++) {
values = new ContentValues();
Uri rawContactUri = contentResolver.insert(RawContacts.CONTENT_URI,
values);
long rawContactId = ContentUris.parseId(rawContactUri); // 添加名字
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
values.put(StructuredName.GIVEN_NAME, contactList.get(i).firstName);
values.put(StructuredName.FAMILY_NAME, contactList.get(i).lastName);
contentResolver.insert(Data.CONTENT_URI, values);
// 添加号码
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.TYPE, contactList.get(i).phoneType);
values.put(Phone.NUMBER, contactList.get(i).phone);
contentResolver.insert(Data.CONTENT_URI, values); // 添加邮箱
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
values.put(Email.DATA, contactList.get(i).email);
contentResolver.insert(Data.CONTENT_URI, values); // 添加地址
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
values.put(StructuredPostal.STREET, contactList.get(i).street);
values.put(StructuredPostal.COUNTRY, contactList.get(i).country);
values.put(StructuredPostal.CITY, contactList.get(i).city);
values.put(StructuredPostal.REGION, contactList.get(i).state);
values.put(StructuredPostal.POSTCODE, contactList.get(i).postCode);
contentResolver.insert(Data.CONTENT_URI, values);
}
我现在的代码是这样的
for (int i = 0; i < contactList.size(); i++) {
values = new ContentValues();
Uri rawContactUri = contentResolver.insert(RawContacts.CONTENT_URI,
values);
long rawContactId = ContentUris.parseId(rawContactUri); // 添加名字
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
values.put(StructuredName.GIVEN_NAME, contactList.get(i).firstName);
values.put(StructuredName.FAMILY_NAME, contactList.get(i).lastName);
contentResolver.insert(Data.CONTENT_URI, values);
// 添加号码
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.TYPE, contactList.get(i).phoneType);
values.put(Phone.NUMBER, contactList.get(i).phone);
contentResolver.insert(Data.CONTENT_URI, values); // 添加邮箱
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
values.put(Email.DATA, contactList.get(i).email);
contentResolver.insert(Data.CONTENT_URI, values); // 添加地址
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
values.put(StructuredPostal.STREET, contactList.get(i).street);
values.put(StructuredPostal.COUNTRY, contactList.get(i).country);
values.put(StructuredPostal.CITY, contactList.get(i).city);
values.put(StructuredPostal.REGION, contactList.get(i).state);
values.put(StructuredPostal.POSTCODE, contactList.get(i).postCode);
contentResolver.insert(Data.CONTENT_URI, values);
}
问题是这样的
在contacts provider的代码里面会起一个线程去不断的寻找同名的contact然后合并起来。
你如果能改源码的话可以去看看
在应用里也能把一个联系人join到另一个联系人当中
只不过是同名的联系人contacts provider会把他们自动join在一起。
研究下provider里的表结构,join的实现
或者可以直接把自动join的线程停掉。