我把从数据库获得的数据逐条添加到手机中,但是遇到相同的名字(即使名和姓分开不同,连起来相同)就会自动的添加到一个下边,但还是两条记录,有人遇到过这种情况吗,我想让它们分开,每次遇见一个名字就添加一条新的记录,该怎样解决呢
我现在的代码是这样的
                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);
}

解决方案 »

  1.   

    你调用添加到地方没有问题
    问题是这样的
    在contacts provider的代码里面会起一个线程去不断的寻找同名的contact然后合并起来。
    你如果能改源码的话可以去看看
      

  2.   

    具体不记得了,自己去看下源码吧
    在应用里也能把一个联系人join到另一个联系人当中
    只不过是同名的联系人contacts provider会把他们自动join在一起。
    研究下provider里的表结构,join的实现
    或者可以直接把自动join的线程停掉。
      

  3.   

    感觉你这个应该是在做sql查询的时候筛选下吧  select distinct name from tablename