PhoneGap:以优化速度获取联系人列表

时间:2015-05-22 10:07:01

标签: android cordova phonegap-plugins phonegap-build

在Phonegap中我尝试从手机中获取联系人列表。我只需要姓名和电话号码,大约需要40秒才能获取所有结果。我在config.xml中添加插件。在我的手机中我只有400个联系人。但是,当我在 index.html 中提醒联系时间时,它会显示1351列表。我不知道我错在哪里。我认为从电话中获取姓名和号码时需要进行一些优化。

提前谢谢... :)

的Config.xml

 <feature name="Contacts">
    <param name="android-package" value="org.apache.cordova.contacts.ContactManager" />
</feature>

的index.html

        document.addEventListener("deviceready", onDeviceReady, false);
        function onDeviceReady() {
            var options = new ContactFindOptions();
            options.filter="";    
            options.multiple=true; 
            filter  = ["displayName", "phoneNumbers"];
            navigator.contacts.find(filter, onSuccess, onError, options);
        }

       var cSort = function(a, b) {
          aName = a.displayName ;
          bName = b.displayName ;
            return aName < bName ? -1 : (aName == bName ? 0 : 1);
            };

        function onSuccess(contacts) {              
            contacts = contacts.sort(cSort);
            alert("length " + contacts.length  );
            var i =0;       
            for (var i = 0; i < contacts.length; i++) 
            {
                console.log("Display Name = " + contacts[i].displayName);
                 if(contacts[i].displayName != null)
                 {
                    if( contacts[i].phoneNumbers == null )
                     continue;
                    else if(contacts[i].phoneNumbers.length)
                    {                           
                        for (var j=0; j<contacts[i].phoneNumbers.length; j++)
                         {
                          $('#contact_list').append('<li> Name:'+contacts[i].displayName+'</li>');
                          $('#contact_list').append('<li> Number:'+contacts[i].phoneNumbers[j].value+'</li><br><br>');
                        }
                        $('#contact_list').listview('refresh');
                    }
                 }
            }        
        }
        function onError(contactError) {
            alert('onError!');
        }
    </script>

2 个答案:

答案 0 :(得分:0)

@BINIL S,你有一个非常昂贵的Jquery调用:

$('#contact_list').append(...);

更改为:

listEntryPoint = $('#contact_list');

将其移到循环外部并将其分配给变量,这应该有所帮助。您也不能一次插入一个新条目。您可以在插入HTML之前创建一个大的列表。像这样,

finalList += '<li> Name:'+contacts[i].displayName+'</li>' + '<li> Number:'+contacts[i].phoneNumbers[j].value+'</li><br><br>';

循环完成后,

listEntryPoint.append(finalList);

那应该有所帮助 - 杰西

答案 1 :(得分:0)

更改您的代码:

            {                           
                for (var j=0; j<contacts[i].phoneNumbers.length; j++)
                 {
                  $('#contact_list').append('<li> Name:'+contacts[i].displayName+'</li>');
                  $('#contact_list').append('<li> Number:'+contacts[i].phoneNumbers[j].value+'</li><br><br>');
                }
                $('#contact_list').listview('refresh');
            }

要:

                {
                    var finalList = '';
                    listEntryPoint = $('#contact_list');
                    for (var j=0; j<contacts[i].phoneNumbers.length; j++)
                     {
                        finalList += '<li> Name:'+contacts[i].displayName+'</li>' + '<li> Number:'+contacts[i].phoneNumbers[j].value+'</li><br><br>';
                    }
                    listEntryPoint.append(finalList);
                    listEntryPoint.listview('refresh');
                }