【问题标题】:openDatabase creates error in Android PhoneGap applicationopenDatabase 在 Android PhoneGap 应用程序中创建错误
【发布时间】:2011-06-07 21:45:31
【问题描述】:

我使用 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 版本的建议,但这并没有帮助。还有其他建议吗? 可能是我错过的非常明显的事情,因为我对此完全陌生。 如果有帮助,该应用程序的 Web 浏览器形式的完整代码位于 https://github.com/fhr/Handicap-timer-app

【问题讨论】:

    标签: javascript android sqlite cordova


    【解决方案1】:

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

    【讨论】:

    • 嗨,Wilbur - 对于我的反应非常缓慢,我深表歉意。我正在使用 PhoneGap 0.9.5。
    • ... 继续:我不确定如何以“应用程序格式”共享应用程序代码(我完全是 Java 和应用程序的业余爱好者)并且找不到生成的文件指 phonegap.js - 你知道这通常在项目的哪个子目录中吗?谢谢
    【解决方案2】:

    我认为它试图打开文件“file:///android_asset/www/handicap.js” 与 db 通常位于 //data/data//database/dbfile 的位置相反(通常没有扩展名)

    请发布更多代码

    我认为它是您使用的开放数据库。

    【讨论】:

    • 谢谢欧文。但是,我不明白为什么当数据库在浏览器中运行良好时这应该是一个问题 - 只有在尝试使用 PhoneGap 将其放入应用程序之后才会出现问题 - 从错误消息中看起来好像它不理解openDatabase 作为命令。我已经在上面的问题中添加了周围的代码行,以防万一。
    【解决方案3】:

    覆盖 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);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      • 2013-07-11
      • 2011-11-21
      • 2023-03-09
      • 2013-01-28
      • 1970-01-01
      相关资源
      最近更新 更多