如何仅更新联系人而不是添加同步适配器

Nav*_*Nav 5 android contactscontract android-syncadapter android-contacts rawcontactid

我的应用数据库中存储的数字很少.我想在联系人应用中匹配这些数字并更新与mimetype的联系.基本上是Whatsapp的作用.他们同步所有联系人,他们的应用程序图标联系.

我已完成同步部分,如果我添加新的联系人,那么我可以在联系人中显示我的应用程序图标.但我的要求是只更新现有联系人.

这是我试图更新联系人,

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

        ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true))
            .withValueBackReference(Data.RAW_CONTACT_ID,id)
            .withValue(Data.MIMETYPE, MIMETYPE)
            .withValue(Data.DATA1, "Username")
            .withValue(Data.DATA2, "Ite's Me")
            .build());

        try {
            context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
Run Code Online (Sandbox Code Playgroud)

而且rawContactid我从中获取

Cursor cursor = context.getContentResolver().query(Data.CONTENT_URI, new String[] {Data.RAW_CONTACT_ID, Data.DISPLAY_NAME, Data.MIMETYPE, Data.CONTACT_ID }, 
             ContactsContract.CommonDataKinds.Phone.NUMBER + "= ?", 
                     new String[] {phonenumb}, null);
Run Code Online (Sandbox Code Playgroud)

我无法在该联系人中添加连接.我究竟做错了什么.有人可以帮我这个.

提前致谢.

Pat*_*nan 0

问题是您正在使用withValueBackReference引用原始联系人 ID。这将尝试使用您的参数作为批次中先前操作的索引来获取原始联系人的 id,即如果 id=0,它将引用回第一个操作,如果它是新原始操作的插入contact,使用生成的 id 作为插入联系人数据的原始联系人 id。您想在此处使用withValue,因为您已经拥有原始联系人 ID。