Android Eclipse Phonegap SQLite错误-不幸的是已停止

Android Eclipse Phonegap SQLite错误-不幸的是已停止,android,xml,eclipse,sqlite,cordova,Android,Xml,Eclipse,Sqlite,Cordova,我是新来的。我正在尝试从phonegap和sqlite制作一本字典。当我启动应用程序时,错误提示说不幸的是字典已经停止。我的程序出了什么问题。 我来自印度尼西亚,对不起我的英语。这是我的xml代码 <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=devi

我是新来的。我正在尝试从phonegap和sqlite制作一本字典。当我启动应用程序时,错误提示说不幸的是字典已经停止。我的程序出了什么问题。 我来自印度尼西亚,对不起我的英语。这是我的xml代码

<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>My Contacts</title>
        <link rel="stylesheet" href="jquery.mobile-1.1.0.min.css">
        <script type="text/javascript" charset="utf-8" src="jquery-1.7.2.min.js"></script>
        <script type="text/javascript" charset="utf-8" src="jquery.mobile-1.1.0.min.js"></script>
        <script type="text/javascript" charset="utf-8" src="cordova-1.9.0.js"></script>
        <style>
        .error{
            font-size: 0.8em;
            border: 1px solid;
            margin: 10px 0px;
            padding:15px 10px 15px 8px;
            text-align:center;
            color: #D8000C;
            background-color: #FFBABA;
        }
        </style>
        <script type="text/javascript" charset="utf-8">

        $(document).ready(function(){

            document.addEventListener("deviceready", onDeviceReady, false);

            var db = window.openDatabase("Database", "1.0", "MyContactsDB", 200000);

            function onDeviceReady(){
                //Populate the databse
                db.transaction(populateDB, errorCB, successCB);
                //Override the back button functionality
                document.addEventListener('backbutton', onBack, false);
            }

            function onBack(){
                //If the current page is index page then exit other wise navigate to index page
                if($.mobile.activePage.is('#index')){
                    navigator.app.exitApp();
                }
                else{
                    db.transaction(queryDB, errorCB);
                }
            }               

            function populateDB(tx){
                //Create the table
                //tx.executeSql('DROP TABLE IF EXISTS MyContacts');
                tx.executeSql('CREATE TABLE IF NOT EXISTS MyContacts (id INTEGER PRIMARY KEY AUTOINCREMENT, \
                        name TEXT NOT NULL, nickName TEXT, mobilePhoneNumber INT, \
                        workPhoneNumber INT, emailId TEXT, website TEXT, happyBirthDay TEXT)\
                         ');
                tx.executeSql('SELECT id, name, nickName FROM MyContacts ORDER BY name', [], querySuccess, errorCB);
            }

            function successCB(){
                db.transaction(queryDB, errorCB);
            }

            function queryDB(tx){
                tx.executeSql('SELECT id, name, nickName FROM MyContacts ORDER BY name', [], querySuccess, errorCB);
            }

            function querySuccess(tx, results){
                $.mobile.showPageLoadingMsg(true);
                var len = results.rows.length;
                $("#userList").html('');
                for (var i=0; i<len; i++){
                    var row= results.rows.item(i);
                    var htmlData = '<li id="'+row["id"]+'"><a href="#"><h2>'+row["name"]+'</h2><p class="ui-li-aside">'+row["nickName"]+'</p></a></li>';
                    $("#userList").append(htmlData).listview('refresh');
                }
                $.mobile.changePage($("#index"), { transition : "slide"});
                $.mobile.hidePageLoadingMsg();
            }

            function errorCB(err){

            }       

            $("#addNewPage .error").html('').hide();

            $(".addNew").bind ("click", function (event){
                $("#addNewPage .error").html('').hide();
                $.mobile.changePage ($("#addNewPage"), { transition : "slide", reverse : true });
                $("#addNewPageHeader").html("Add New");
            });

            $("#save").bind ("click", function (event){
                var name = $.trim($("#name").val()).replace(/[^A-Za-z0-9 ]/g, '');
                var nickName = $.trim($("#nickName").val()).replace(/[^A-Za-z0-9 @]/g, '');
                var mobilePhoneNumber = $.trim($("#mobilePhoneNumber").val()).replace(/[^0-9-]/g, '');
                var workPhoneNumber = $.trim($("#workPhoneNumber").val()).replace(/[^0-9-]/g, '');
                var emailId = $.trim($("#emailId").val());
                var website = $.trim($("#website").val());
                var happyBirthDay = $.trim($("#happyBirthDay").val());
                console.log(name+' '+nickName+' '+mobilePhoneNumber+' '+workPhoneNumber+' '+emailId+' '+website+' '+happyBirthDay);

                if (name == ''){
                    $("#addNewPage .error").html('Please enter name.').show();
                }
                else{
                    resetForm();

                    var id = $("#id").val();
                    $("#id").val('');
                    if (id == ''){  //Save
                        db.transaction(function (tx){ tx.executeSql("INSERT INTO MyContacts (name, nickName, mobilePhoneNumber, workPhoneNumber, emailId, website, happyBirthDay) VALUES  (?, ?, ?, ?, ?, ?, ?)",[name, nickName, mobilePhoneNumber, workPhoneNumber, emailId, website, happyBirthDay],
                        queryDB, errorCB); });  
                    }
                    else{   //Update
                        db.transaction(function (tx){ tx.executeSql("UPDATE MyContacts SET name=?, nickName=?, mobilePhoneNumber=?, workPhoneNumber=?, emailId=?, website=?, happyBirthDay=? WHERE id=? ",[name, nickName, mobilePhoneNumber, workPhoneNumber, emailId, website, happyBirthDay, id],
                        queryDB, errorCB); });  
                    }
                    db.transaction(queryDB, errorCB);
                }
            });

            $(".refresh").bind("click", function (event){
                db.transaction(queryDB, errorCB);
            });

            $(".back").bind("click", function (event){
                resetForm();
                db.transaction(queryDB, errorCB);
            });

            function resetForm(){
                $("#addNewPage .error").html('').hide();
                $("#addNewPage #name").val('');
                $("#addNewPage #nickName").val('');
                $("#addNewPage #mobilePhoneNumber").val('');
                $("#addNewPage #workPhoneNumber").val('');
                $("#addNewPage #emailId").val('');
                $("#addNewPage #website").val('');
                $("#addNewPage #happyBirthDay").val('');
                $("#addNewPage #addNewPageHeader").html('');    
            }

            $("#index [data-role='content'] ul").on('tap taphold', 'li', function (event){
                event.preventDefault();
                event.stopImmediatePropagation();
                var liId = this.id;
                if (event.type === 'taphold'){
                    navigator.notification.vibrate(30);
                    var $popup = $('#actionList-popup');
                    $("#actionList").html('');
                    $("#actionList").append('<li id="edit&'+liId+'">Edit</li>').listview('refresh');
                    $("#actionList").append('<li id="delete&'+liId+'">Delete</li>').listview('refresh');
                    $popup.popup();
                    $popup.popup('open');
                    $("#tapHoldCheck").val('true');
                } 
                else if (event.type === 'tap'){
                    if ($("#tapHoldCheck").val() == ''){ //If the value of the text box is blank then only tap will work
                        db.transaction(function (tx){
                            tx.executeSql("SELECT name, nickName, mobilePhoneNumber, workPhoneNumber, emailId, website, happyBirthDay  FROM MyContacts WHERE id=?;", [liId], function (tx, results){
                                var row = results.rows.item(0);
                                $.mobile.showPageLoadingMsg(true);
                                $.mobile.changePage($("#displayDataPage"), { transition : "slide"});
                                $("#nameHeader").html(row['name']);
                                $("#dataName").html(row['name']);
                                $("#dataNickName").html(row['nickName']);
                                $("#dataMobilePhoneNumber").html(row['mobilePhoneNumber']);
                                if(row['mobilePhoneNumber'] != ''){
                                    $("#mpnCallSMS").html(
                                    '<div class="ui-grid-a">' +
                                        '<div class="ui-block-a">'+
                                            '<a href="tel:'+row['mobilePhoneNumber']+'" data-role="button">Call</a>' +
                                            '</div>' +
                                        '<div class="ui-block-b">' +
                                            '<a href="sms:'+row['mobilePhoneNumber']+'" data-role="button">SMS</a>' +
                                        '</div>' +
                                    '</div>'
                                    );
                                }
                                else{
                                    $("#mpnCallSMS").html('');
                                }
                                $("#dataWorkPhoneNumber").html(row['workPhoneNumber']);
                                if(row['workPhoneNumber'] !='' ){
                                    $("#wpnCallSMS").html(
                                    '<div class="ui-grid-a">' +
                                        '<div class="ui-block-a">'+
                                            '<a href="tel:'+row['workPhoneNumber']+'" data-role="button">Call</a>' +
                                            '</div>' +
                                        '<div class="ui-block-b">' +
                                            '<a href="sms:'+row['workPhoneNumber']+'" data-role="button">SMS</a>' +
                                        '</div>' +
                                    '</div>'
                                    );
                                }
                                else{
                                    $("#wpnCallSMS").html('');
                                }
                                $("#dataEmailId").html('<a href="mailto:'+row['emailId']+'">'+row['emailId']+'</a>');
                                $("#dataWebsite").html('<a href="'+row['website']+'" data-role="external">'+row['website']+'</a>');
                                $("#dataHappyBirthDay").html(row['happyBirthDay']);
                                $('#dataList').trigger('create');
                                $('#dataList').listview('refresh');
                                $.mobile.hidePageLoadingMsg();
                            });
                         });
                    }
                }
            });

            //Change the hidden field value when the popup is closed
            $('#actionList-popup').bind({
                popupafterclose: function(event, ui){ 
                    $("#tapHoldCheck").val('');
                }
            });

            $("#index [data-role='popup'] ul").on('click', 'li', function (event){
                var action_liId = this.id.split('&');
                var action = action_liId[0];
                var id = action_liId[1];
                if (action == 'edit'){
                    db.transaction(function (tx){
                        tx.executeSql("SELECT name, nickName, mobilePhoneNumber, workPhoneNumber, emailId, website, happyBirthDay  FROM MyContacts WHERE id=?;", [id], function (tx, results){
                            var row = results.rows.item(0);
                            $("#name").val(row['name']);
                            $("#nickName").val(row['nickName']);
                            $("#mobilePhoneNumber").val(row['mobilePhoneNumber']);
                            $("#workPhoneNumber").val(row['workPhoneNumber']);
                            $("#emailId").val(row['emailId']);
                            $("#website").val(row['website']);
                            $("#happyBirthDay").val(row['happyBirthDay']);
                            $("#id").val(id);
                            $("#addNewPageHeader").html('Edit');
                            $.mobile.changePage ($("#addNewPage"), { transition : "slide", reverse : true });
                        });
                     });
                }
                if (action == 'delete'){
                    navigator.notification.confirm(
                        'Are you sure?',
                        function(buttonIndex){onConfirm(buttonIndex, id);},
                        'Delete Contact',
                        'Ok, Cancel'
                    );
                }
            });

            function onConfirm(buttonIndex, id){
                if (buttonIndex === 1){ //Delete 
                    db.transaction(function (tx){ tx.executeSql("DELETE FROM MyContacts WHERE id=?", [id], queryDB, errorCB); });
                }
                if (buttonIndex === 2){
                    $.mobile.changePage($("#index"), { transition : "slide"});
                }
            }

        });
        </script>
    </head>
<body>

    <!-- Index Page Start -->
    <div data-role="page" id="index">
        <div data-role="header" data-position="fixed">
            <a href="#" class="refresh" data-role="button" data-icon="refresh" data-theme="a" title="Refresh">Refresh</a>
            <h1>My Contacts</h1>
            <a href="#" class="addNew" data-role="button" data-icon="add" data-theme="a" title="Add New">Add</a>
        </div>
        <div data-role="content">
            <ul data-role="listview" data-filter="true" data-filter-placeholder="Search..." id="userList">  </ul>
        </div>
        <div data-role="popup" id="actionList-popup" data-overlay-theme="a">
            <ul data-role="listview" id="actionList" style="border: 1px solid blue; width:15em">  </ul>
        </div>
        <input type="hidden" id="tapHoldCheck" value="" />
    </div>
    <!-- Index Page End -->

    <!-- Data Display Page Start -->
    <div data-role="page" id="displayDataPage">
        <div data-role="header" data-position="fixed">
            <a href="#" class="back" data-role="button" data-icon="arrow-l" data-theme="a" title="Back">Back</a>
            <h1 id="nameHeader"></h1>
            <a href="#" class="addNew" data-role="button" data-icon="add" data-theme="a" title="Add New">Add</a>
        </div>
        <div data-role="content">
            <ul data-role="listview" id="dataList">
                <li>Name : <span id="dataName"></span></li>
                <li>Nick Name : <span id="dataNickName"></span></li>
                <li>Mobile Phone Number : <span id="dataMobilePhoneNumber"></span></li>
                <li id="mpnCallSMS"></li>
                <li>Work Phone Number : <span id="dataWorkPhoneNumber"></span></li>
                <li id="wpnCallSMS"></li>
                <li>Email Id : <span id="dataEmailId"></span></li>
                <li>Website : <span id="dataWebsite"></span></li>
                <li>Happy Birth Day : <span id="dataHappyBirthDay"></span></li>
            </ul>
        </div>
    </div>
    <!-- Data Display Page End -->

    <!-- Form Page Start -->
    <div data-role="page" id="addNewPage">
        <div data-role="header" data-position="fixed">
            <a href="#" class="back" data-role="button" data-icon="arrow-l" data-theme="a" title="Back">Back</a>
            <h1 id="addNewPageHeader"></h1>
            <a href="#" id="save" data-role="button" data-icon="check" data-theme="a" title="Save">Save</a>
        </div>
        <div data-role="content">
            <div class='error'></div>
            <div data-role="fieldcontain">
                <label for="name">Name:</label>
                <input type="text" name="name" id="name" required="true" maxlength="100" value="" />
            </div>
            <div data-role="fieldcontain">
                <label for="nickName">Nick Name:</label>
                <input type="text" name="nickName" id="nickName" maxlength="100" value="" />
            </div>
            <div data-role="fieldcontain">
                <label for="mobilePhoneNumber">Mobile Number:</label>
                <input type="tel" name="mobilePhoneNumber" id="mobilePhoneNumber" maxlength="15" value="" />
            </div>
            <div data-role="fieldcontain">
                <label for="workPhoneNumber">Work Phone Number:</label>
                <input type="tel" name="workPhoneNumber" id="workPhoneNumber" maxlength="15" value="" />
            </div>
            <div data-role="fieldcontain">
                <label for="emailId">Email Id:</label>
                <input type="email" name="emailId" id="emailId" maxlength="100" value="" />
            </div>
            <div data-role="fieldcontain">
                <label for="website">Website:</label>
                <input type="url" name="website" id="website" maxlength="100" value="" />
            </div>
            <div data-role="fieldcontain">
                <label for="happyBirthDay">Happy Birth Day:</label>
                <input type="date" name="happyBirthDay" id="happyBirthDay" value="" />
            </div>
            <input type="hidden" name="id" id="id" value="" />
        </div>
    </div>
    <!-- Form Page End -->

</body>
尝试设置var-db

排队前

$(document).ready(function(){
然后在函数OnDevicerady{set的内部:

这将确保db是全局可访问的。我不确定这会导致应用程序崩溃,但值得一看

db = window.openDatabase("Database", "1.0", "MyContactsDB", 200000);