如何使用phonegap 2.0.0获取设备联系人?

til*_*lak 2 android cordova

我正在使用phonegap(Cordova 2.0.0)开发一个Android应用程序.我需要检索设备联系人.我已尝试使用此doc提供的代码

http://docs.phonegap.com/en/2.0.0/cordova_contacts_contacts.md.html#Contacts

我的代码如下

$("#shareoptions3").live('click',function(){        

    var options = new ContactFindOptions();

    options.multiple  = true; 
    var fields = ["displayName","phoneNumbers"];//["displayName", "name","phoneNumbers"];
    navigator.contacts.find(fields, onContactSuccess, onContactError, options);
});

function onContactSuccess(contacts) {//alert(contacts.length);

    for (var i=0; i<contacts.length; i++) {
        // display phone numbers
        for (var j=0; j<contacts[i].phoneNumbers.length; j++) {
            alert("Type: " + contacts[i].phoneNumbers[j].type + "\n" + 
                "Value: "  + contacts[i].phoneNumbers[j].value + "\n" + 
                "Preferred: "  + contacts[i].phoneNumbers[j].pref);
        }
    }
};

// onError: Failed to get the contacts
//
function onContactError(contactError) {
    console.log('Error in getting contacts!');
}
Run Code Online (Sandbox Code Playgroud)

我在Logcat中收到消息,如下所示:

成功回调错误:Contacts3 = TypeError:无法在file:///android_asset/www/JS/cordova-2.0.0.js读取null的属性'length':258

请帮我解决这个问题.

Lit*_*ttm 6

您的某个联系人可能没有电话号码,这就是您获得null价值而不是电话号码的原因.

因此,在你的for循环中,其中一个会contacts[i].phoneNumbers.length产生错误.

我建议您在显示/提醒之前先检查是否phoneNumbersnull,通过使用:

if(contacts[i].phoneNumbers != null)
Run Code Online (Sandbox Code Playgroud)


最后,您可以尝试这样的事情:

$("#shareoptions3").live('click',function(){        

    var options = new ContactFindOptions();

    options.multiple  = true; 
    var fields = ["displayName","phoneNumbers"];//["displayName", "name","phoneNumbers"];
    navigator.contacts.find(fields, onContactSuccess, onContactError, options);
});

function onContactSuccess(contacts) {//alert(contacts.length);

    for (var i=0; i<contacts.length; i++) {

        // display phone numbers

        if(contacts[i].phoneNumbers != null)  // Checking if not null
            for (var j=0; j<contacts[i].phoneNumbers.length; j++) {
                alert("Type: " + contacts[i].phoneNumbers[j].type + "\n" + 
                    "Value: "  + contacts[i].phoneNumbers[j].value + "\n" + 
                    "Preferred: "  + contacts[i].phoneNumbers[j].pref);
            }
    }
};

// onError: Failed to get the contacts
//
function onContactError(contactError) {
    console.log('Error in getting contacts!');
}
Run Code Online (Sandbox Code Playgroud)

希望这有帮助,请告诉我这是否适合您.