cordova联系人插件联系人数据是复制,而不是覆盖联系人数据

我有在我的应用程序function,检查用户联系人使用cordova联系人插件与在线数据库的用户。 如果用户设备中的任何联系人都有帐户,则该设备上的帐户数据将被更新。

该function适用​​于名称和出生date等内容,但电子邮件和电话号码不会覆盖现有的联系人数据,而是为这些数据创build新的条目。

直观的错误

这个特定的用户只能有1个电子邮件地址和1个电话号码。

JSON响应并保存

var contacts = json.contacts; for(var x = 0; x < contacts.length; x++){ var user = contacts[x]; //console.log(user); //get old contact by id //Set the options for finding conact var options = new ContactFindOptions(); options.filter = user.id; //name that you want to search options.multiple = false; var fields = ["id","displayName"]; navigator.contacts.find(fields, function(c){ c = c[0]; var dob = user.iceTV.dob.split(':'); c.displayName = user.iceTV.f_name + " " + user.iceTV.l_name; c.nickname = user.iceTV.f_name + " " + user.iceTV.l_name; c.birthday = new Date(dob[2], dob[1] - 1, dob[0]); c.name.givenName = user.iceTV.f_name; c.name.familyName = user.iceTV.l_name; c.name.formatted = user.iceTV.f_name + " " + user.iceTV.l_name; if(c.emails == null){ c.emails = []; } for(var a = 0; a < user.emails; a++){ c.emails[a] = { value : user.emails[a] }; } if(c.phoneNumbers == null){ c.phoneNumbers = []; } c.phoneNumbers[0] = {type : 'mobile', value: user.iceTV.number}; if(user.pp == null){ c.photos = null; } else { contacts.photos[0] = { pref : false, type : 'url', value : user.iceTV.pp }; } c.save(function(saveSuccess) { console.log('User updated' ,c); }, function(saveError){ console.log("Error when updating"); }); }, function (e){ makeToast("Error = " + e.code); }, options); } 

我遇到了同样的问题,并通过在电话号码中添加一个id来解决这个问题。 对于您的示例代码,您必须更改的行如下所示:

 c.phoneNumbers[0] = {type : 'mobile', value: user.iceTV.number, id: 0}; 

但是:这只能修复重复。 当您删除数据库中的phoneNumber时,将不会在联系人中删除。 在这里看到我的问题了解更多详情。