保存Cordova联系插件后获取contact.id.

时间:2015-06-27 15:45:00

标签: android angularjs cordova azure-mobile-services

我需要在保存后取回联系人ID,以便将其保存到我的在线数据库中。但是,cordova contact.save()方法在执行后不会返回id。

这是我的逻辑:

if ($scope.contact.id === undefined) {
            contact.save();
            var savedContact = navigator.contacts.find({ "phoneNumbers[0]": phoneNumbers[0].value });
            console.log("Contact ID is:", savedContact.id);
            table.insert({ id: contact.id.value, firstname: name.givenName, lastname: name.familyName, homephone: phoneNumbers[0].value, mobilephone: phoneNumbers[1].value, email: emails[0].value });
        }

这不起作用。

有没有办法检索联系人的ID,而无需使用这样的电话号码搜索电话联系人列表:

QUOTIENT(+A1:A3,4)
WORKDAY(+A1:A3,7)   

以上看起来似乎太过分了。更不用说它可能甚至没有返回正确的联系人,因为电话号码可能不是唯一的。(如果有人用不同的信息保存了两次联系人)

1 个答案:

答案 0 :(得分:1)

contact.save()可以进行两次回调,成功和失败。成功回调应该返回新保存的联系人(包括id。)

if ($scope.contact.id === undefined) {
  contact.save(contactSuccess, contactFailure);  
}

function contactSuccess(newContact) {
  console.log("Contact ID is:", newContact.id);
  table.insert({ id: contact.id.value, firstname: name.givenName, lastname: name.familyName, homephone: phoneNumbers[0].value, mobilephone: phoneNumbers[1].value, email: emails[0].value });
}

function contactError(err) {
  //bb10 fires multiple error callbacks with empty errors
  if (err) {
    console.log(err);   
  }
}

由于看起来您正在使用Angular,请查看ngCordova项目。它为一些插件提供了一些不错的包装器,使一切都更具可读性。以下是their contacts docs的相关摘录:

$cordovaContacts.save($scope.contactForm).then(function(savedContact) {
  console.log("Contact ID is:", newContact.id);
  table.insert({ id: contact.id.value, firstname: name.givenName, lastname: name.familyName, homephone: phoneNumbers[0].value, mobilephone: phoneNumbers[1].value, email: emails[0].value });
}, function(err) {
  if (err) {
    console.log(err);   
  }
});