openDatabase在Android PhoneGap应用程序中创建错误

时间:2011-06-07 21:45:31

标签: javascript android sqlite cordova

我使用HTML5和JavaScript(包括JQTouch)构建了一个基本的手机应用程序,然后使用PhoneGap将其变成一个Android应用程序(经过许多创伤 - 似乎PhoneGap和Windows计算机相处得不太好)。

该应用在Chrome中运行良好,但在Android模拟器上,LogCat中出现以下错误:

06-07 21:38:51.711: DEBUG/WebCore(204): Console: ReferenceError: Can't find variable: openDatabase line: 9 source: file:///android_asset/www/handicap.js

这是指在handicap.js中的以下行:

db = openDatabase('Handicaps', '1.0', 'Handicaps', 65536);

这段代码的更广泛背景是:

// initialise all important functions
$(document).ready(function(){
$('#newrace form').submit(saveRace);
$('#newrace form').submit(setTitle);
$('#enterhandicaps form').submit(savePrediction);
$('#enterhandicaps form').submit(refreshEntries);
$('#calcraces').click(raceList);
// create database to hold data on predicted and actual times
db = openDatabase('Handicaps', '1.0', 'Handicaps', 65536);
db.transaction(
    function(transaction) {
        transaction.executeSql(
            'CREATE TABLE IF NOT EXISTS predictions (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,racename TEXT NOT NULL, runner TEXT NOT NULL, prediction INTEGER, start TEXT, finish TEXT, position TEXT);'
        );
        transaction.executeSql(
            'CREATE TABLE IF NOT EXISTS races (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,racename TEXT NOT NULL, date TEXT, distance REAL);'
        );
        transaction.executeSql(
            'CREATE TABLE IF NOT EXISTS autocompletion (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,runner TEXT NOT NULL, value TEXT,racename TEXT NOT NULL);'
        );
    }
);
}
);

在查看其他在stackoverflow上遇到类似问题的人时,我尝试过仅使用2.2以下Android版本的建议,但这没有帮助。还有其他建议吗? 可能是我错过的非常明显的东西,因为我对此完全陌生。 如果有帮助,则网络浏览器表单中应用的完整代码位于https://github.com/fhr/Handicap-timer-app

3 个答案:

答案 0 :(得分:1)

您是否可以使用所有对phonegap.js等的引用以app格式共享您的应用代码?另外,我没有看到使用window对象的代码。根据phonegap apis,使用openDatabase()的正确方法是var db = window.openDatabase()。此外,如果您还可以提及您正在使用的pg版本,这将有所帮助。

答案 1 :(得分:0)

我认为它试图打开文件“file:///android_asset/www/handicap.js” 而不是db通常是// data / data // database / dbfile(通常没有扩展名)

请发布更多代码

我认为它是你使用的opendatabase。

答案 2 :(得分:0)

覆盖WebChromeClient对象中的onExceededDatabaseQuota方法。

    @Override
    public void onExceededDatabaseQuota(String url, String databaseIdentifier,
            long currentQuota, long estimatedSize, long totalUsedQuota,
            WebStorage.QuotaUpdater quotaUpdater) {
        Log.d("test", "onExceededDatabaseQuota : " + "  currentQuota=" + currentQuota
                + "   estimatedSize=" + estimatedSize + "   totalUsedQuota=" + totalUsedQuota);
        quotaUpdater.updateQuota(estimatedSize * 2);
    }