我正在使用phonegap,我的实际代码显示了我手机中每个联系人的姓名,但是当我想显示电话号码时,我显示“空”。有些联系人没有电话号码,例如谷歌联系人,但我只测试了一些保存了电话号码的联系人,并且也没有工作!
错误的确切是:“TypeError:无法读取null的属性'0'”。我理解错误,但我不明白为什么如果我测试了一个有电话号码的联系人,请告诉我。
我正在关注http://docs.phonegap.com/en/1.4.1/phonegap_contacts_contacts.md.html#ContactField
的官方教程修改 已添加代码
function onDeviceReady() {
// specify contact search criteria
var options = new ContactFindOptions();
options.filter = "pepepe"; // empty search string returns all contacts
options.multiple = true; // return multiple results
filter = ["displayName"]; // return contact.displayName field
// find contacts
navigator.contacts.find(filter, onSuccess, onError, options);
}
可能是过滤器var中的问题吗?
function onSuccess(contacts) {
for (var i=0; i<contacts.length; i++) {
document.write(contacts[i].displayName);
tlf=contacts[i].phoneNumbers;
try{
document.write(contacts[i].phoneNumbers[0].value);
}
catch(err){
window.alert(err);
}
if (tlf== null){
document.write("No hi han telefons");
}else{
document.write(contacts[i].phoneNumbers[0].value);
}
/*
for (var j=0; j<contacts[i].phoneNumbers.length; j++) {
document.write("Type: " + contacts[i].phoneNumbers[j].type + "\n" +
"Value: " + contacts[i].phoneNumbers[j].value + "\n" +
"Preferred: " + contacts[i].phoneNumbers[j].pref);
}
*/
document.write("<br/>");
}
};
编辑:如果注册了电话号码,总是会返回null,这很奇怪!
答案 0 :(得分:3)
看起来您使用的是过时的文档。从您使用版本3.x的评论。以下是关于如何使用它的documentation。
看起来现在的不同之处在于您必须指定希望能够使用它们的字段。
function onSuccess(contacts) {
alert('Found ' + contacts.length + ' contacts.');
};
function onError(contactError) {
alert('onError!');
};
// find all contacts with 'Bob' in any name field
var options = new ContactFindOptions();
options.filter = "Bob";
options.multiple = true;
var fields = ["displayName", "name"]; //here you would add phoneNumbers
navigator.contacts.find(fields, onSuccess, onError, options);
或者,如果您想获得文档所说的所有字段:
contactFields值为“*”将返回所有联系人字段。
答案 1 :(得分:2)
嘿只是在继续之前检查对象是否为null。这帮助我解决了这个错误。
这是检查
if(contacts [i] .phoneNumbers!= null) {
..................... ......................
}