I started a new project today to load the contacts from my personal database into my iPhone.
cd ~/Documents/pcrepo/aman-importer
phonegap create phonegap-test
cd phonegap-test
phonegap platform add ios
phonegap plugin add org.apache.cordova.contacts
There is documentation for the Contacts API.
The trouble I got into was iteratively creating contacts.
Code like this doesn’t work:
for ( var i in contact_data_list ) {
var contact_data = contact_data_list[ i ];
var contact = navigator.contacts.create();
var name = new ContactName();
name.givenName = contact_data.first_name;
name.familyName = contact_data.last_name;
contact.name = name;
contact.save(
function() { alert( 'saved!' ); },
function() { alert( 'failed!' ); }
);
}
The behavior is that contact.save fails and neither of the success or failure callbacks are invoked.
The way to iterate over the input data is like this:
var index = 0;
var saver = function() {
if ( index === contact_data_list.length ) {
// we're finished enumerating the array, we can report and exit:
navigator.contacts.find( ['*'], report_contacts );
return;
}
var contact_data = contact_data_list[ index++ ];
var contact = navigator.contacts.create();
var name = new ContactName();
name.givenName = contact_data.first_name;
name.familyName = contact_data.last_name;
contact.name = name;
contact.save(
saver,
function() { alert( 'failed!' ); }
);
};
saver();
You can see it for real over here…