【问题标题】:PhoneGap : Fetch Contact list with optimize speedPhoneGap:以优化速度获取联系人列表
【发布时间】:2015-08-04 07:28:33
【问题描述】:

在 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>

【问题讨论】:

    标签: android cordova phonegap-plugins phonegap-build


    【解决方案1】:

    从以下位置更改您的代码:

                {                           
                    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');
                    }
    

    【讨论】:

    • 我怀疑我们在哪里声明了 "listEntryPoint" 。 @JesseMonroy650
    • 是的,我试过了,但仍然需要大约 45 秒才能获得完整结果。获取列表大约需要 25 秒,排序列表需要 20 秒 @JesseMonroy650
    • @Binil,我不知道您的数据,也不知道您的应用程序。下一步是限制显示。尽可能多地显示适合屏幕的内容,然后打印。稍后更新其余部分。
    • 该应用程序只是按字母顺序显示联系人列表。列表排序有什么好的方法吗
    • 联系人 API 内置了一个过滤器。这是您的文档的 URL:plugins.cordova.io/#/package/org.apache.cordova.contacts
    【解决方案2】:

    @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);
    

    这应该会有所帮助 - 杰西

    【讨论】:

    • 什么是“listEntryPoint”@JesseMonroy650
    猜你喜欢
    • 2015-08-16
    • 1970-01-01
    • 2017-06-22
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多