2

我有一个代码片段,我试图将记录插入到我从服务器获取的 Sqlite DB 中。我正在使用PhoneGap Sqlite 插件。数据有时长度为 2000 - 5000,因此插入这些数据大约需要 10-15 秒。

基本上,我使用 Sprite 概念(www.spritely.net/)显示加载屏幕。加载屏幕很快就会启动 ajax 调用,但问题是当响应到来并且代码片段运行以插入记录时,加载屏幕以及 UI 的其余部分都会挂起。

这是代码片段,

    // Save the assignment
    this.saveAssignment = function(iAssignmentObj, iCallback) {
        try {
            this.db.transaction(function(iTx) {
                iTx.executeSql('INSERT OR IGNORE INTO ASSIGNMENT (ID, SAMPLER_ID, ADDRESS_ID, ASSIGNMENT_DATE, LAST_UPDATE_TIME, STATUS) VALUES (?,?,?,?,?,?)',
                               [iAssignmentObj.Id, iAssignmentObj.SamplerId, iAssignmentObj.AddressId,
                                !!iAssignmentObj.AssignmentDate ? iAssignmentObj.AssignmentDate.getTime().toString(): '0',
                                !!iAssignmentObj.LastUpdateTime ? iAssignmentObj.LastUpdateTime.getTime().toString(): '0', iAssignmentObj.Status],
                    function() {
                        iCallback(true);
                    },
                    function() {
                        iCallback(false);
                    }
                );
            });
        }
        catch(iException) {
            console.log('local storage transaction failed for inserting assignment with id '+iAssignmentObj.Id);
            iCallback(false);
        }
    };

我这样称呼这个函数

    // Process the response for Assignments
    this.processResponseForAssignments = function(iData, iIndex, iCallback) {

        var selfObj = this;
        if(iIndex>=iData.length) {
            iCallback();
        }
        else {

            selfObj.saveAssignment(iData[iIndex], function(iBoolean) {

                if(iBoolean) {
                    console.log('Assignment with Id : '+iData[iIndex].Id+' Inserted Successfully');
                }
                else {
                    console.log('Unable to insert Assignment with Id : '+iData[iIndex].Id);
                }

                selfObj.processResponseForAssignments(iData, iIndex+1, iCallback);

            });

        }

    };

我担心的问题是,这段代码与 iOs 完美配合,带有适用于 iOs 的PhoneGap Sqlite 插件,无需挂起 UI,但它在 Android 上很疯狂。

请建议我还需要什么才能使其在 Android 中顺利运行。

4

0 回答 0