我在电话间隙网站上的文档后写了一段代码
// Wait for Cordova to load
//
document.addEventListener("deviceready", onDeviceReady, false);
// Cordova is ready
//
function onDeviceReady() {
// find all contacts
var options = new ContactFindOptions();
var fields = ["displayName", "name"];
navigator.contacts.find(fields, onSuccess, onError, options);
}
// onSuccess: Get a snapshot of the current contacts
//
function onSuccess(contacts) {
for (var i=0; i<contacts.length; i++)
{
console.log("Display Name = " + contacts[i].displayName);
var element = document.getElementById('cont');
element.innerHTML='<li><a href="#">' + contacts[i].displayName + '</a></li>';
}
}
// onError: Failed to get the contacts
//
function onError(contactError) {
alert('onError!');
}
</script>`
它在andriod模拟器中工作正常但是当我安装应用程序三星galaxy手机时它返回“null”。请帮助。
答案 0 :(得分:2)
奇怪......我也得到null
...(使用Phonegap 2.0版)
我建议您使用contacts[i].name.formatted
而不是contacts[i].displayName
。
因此,例如,使用contacts[i].name.formatted
,您的代码应如下所示:
// Wait for Cordova to load
//
document.addEventListener("deviceready", onDeviceReady, false);
// Cordova is ready
//
function onDeviceReady() {
// find all contacts
var options = new ContactFindOptions();
var fields = ["displayName", "name"];
navigator.contacts.find(fields, onSuccess, onError, options);
}
// onSuccess: Get a snapshot of the current contacts
//
function onSuccess(contacts) {
var element = document.getElementById('cont');
for (var i=0; i<contacts.length; i++)
{
console.log("Display Name = " + contacts[i].name.formatted);
element.innerHTML='<li><a href="#">' + contacts[i].name.formatted + '</a></li>';
}
}
// onError: Failed to get the contacts
//
function onError(contactError) {
alert('onError!');
}
以下是您可以使用contacts[i].name
获得的不同信息:
contacts[i].name.givenName
:提供给定名称
contacts[i].name.formatted
:提供格式化名称(名字+姓氏)
contacts[i].name.middleName
:提供中间名称
contacts[i].name.familyName
:提供系列名称(名字+姓氏)
contacts[i].name.honorificPrefix
:提供敬语前缀
contacts[i].name.honorificSuffix
:提供敬语后缀
希望这有帮助。
答案 1 :(得分:1)
这是一个简单解决方案的复杂问题。只添加了一行代码
options.filter="";
options.multiple=true;
var filter = ["*"];
这是完整的代码
<script type="text/javascript" charset="utf-8">
// Wait for Cordova to load
//
document.addEventListener("deviceready", onDeviceReady, false);
// Cordova is ready
//
function onDeviceReady() {
// find all contacts
var options = new ContactFindOptions();
options.filter="";
options.multiple=true;
var filter = ["*"];
navigator.contacts.find(filter, onSuccess, onError, options);
}
// onSuccess: Get a snapshot of the current contacts
//
function onSuccess(contacts) {
var ele = document.getElementById("cont");
var str = '<ul data-role="listview" >';
for (var i=0; i<contacts.length; i++) {
str=str + '<li>' + contacts[i].displayName + '</li>';
}
str = str + '</ul>';
// ele.innerHTML = str;
}
// onError: Failed to get the contacts
//
function onError(contactError) {
alert('onError!');
}
它正在工作,顺便说一下它根据联系人条目也会显示一些空值但工作正常。
答案 2 :(得分:0)
可能是iOS - http://docs.phonegap.com/en/2.1.0/cordova_contacts_contacts.md.html#Contacts。文档说那里不支持displayName。我会遵循Littm的建议,并检查我在这里链接的文档,因为它讨论了哪些属性在不同平台上不起作用。