【问题标题】:How to run a PhoneGap app with Sqlite in Ripple?如何在 Ripple 中使用 Sqlite 运行 PhoneGap 应用程序?
【发布时间】:2013-08-14 15:46:00
【问题描述】:

我有一个 phongap 应用程序,它带有一个在 android 和 iphone 中运行的 sqlite 插件。当我尝试在 Ripple 中运行它时,我会遇到几个错误,具体取决于我使用的 cordova 版本和设备。他们都没有工作。在 stackoverflow 的一些 cmets 中,我看到人们在波纹下的 phonegap 中运行 sqlite。

我在我的项目中使用PG-SQLitePlugin-Android 插件,它实际上只支持Phonegap 2.7.0+。

我发现我可以通过调用 Ripple 来强制使用 2.7.0:

file://localhost/Users/----/----/----/www/index.html?enableripple=cordova-2.7.0

启用通过 chrome 访问文件系统后,Ripple 的负载实际上非常好。

当我在脚本中包含 cordova-2.7.0.js 时

index.html 弹出一个带有以下文本的弹出窗口:

间隙:["Device","getDeviceInfo","Device119187522"]

我可以接受或取消,然后再出现 2 个对话框,如果我接受它就会被挂起。

js 控制台显示cordova 2.7.0 确实在运行:

由于 _cordovaNative 缺失而退回到 PROMPT 模式。仅适用于 Android 3.2 及更低版本。科尔多瓦-2.7.0.js:906

deviceready 不会被触发

当我在脚本中包含 cordova-2.9.0.js 时

和 2.7 一样

由于 _cordovaNative 缺失而退回到 PROMPT 模式。仅适用于 Android 3.2 及更低版本。科尔多瓦-2.7.0.js:906

但这次我遇到了其他错误

加载资源文件失败://localhost/Users/laullobetpayas/-------/---/------/www/cordova/cordova_plugins.json 加载资源文件失败://localhost/Users/-------/---/------/www/cordova/cordova_plugins.js

deviceready 不会被触发

当我的脚本中没有包含任何 cordova.js 时

SQLitePlugin.js:31 未捕获的 ReferenceError:cordova 未定义 SQLitePlugin.js:34

  • 我是否使用了正确的插件?
  • 哪个是使用插件和波纹运行的cordova / device tu的propper版本?
  • 我是否必须在我的项目中包含cordova.js

Hel 将不胜感激,我一直在努力解决这个问题。 提前谢谢你。

【问题讨论】:

    标签: sqlite cordova phonegap-plugins ripple


    【解决方案1】:

    Phonegap 插件不能与 Ripple 一起使用,因为 Phonegap 插件的想法是它提供了一个 Javascript 接口来执行本机代码。这意味着,在 Android 的情况下,Javascript 将调用本机 Java 代码,而在 iOS 的情况下,Javascript 将调用本机的 Objective-C。

    Ripple 完全基于 Javascript,因此插件的 Javascript 部分没有任何接口。

    以 SQLitePlugin 为例,调用SQLitePlugin.close() 会导致调用:

    cordova.exec(null, null, "SQLitePlugin", "close", [this.dbname]);
    

    其中SQLitePlugin 是本机类名,close 是本机函数名。

    如果您想在 Android、iOS 和 Ripple 上使用相同的存储 API,不妨考虑使用带有适当适配器的 lawnchair。

    关于 Ripple 和 Phonegap 2.7.0/2.9.0 的问题,Ripple 还没有完全赶上 Phonegap,所以你会在控制台中看到这些弹出窗口和错误消息,但这不会停止你的 Phonegap 应用程序(没有本机插件)在 Ripple 中运行。你可以用一个简单的测试用例来说服自己:

    document.addEventListener("deviceready", function(){
      alert("I'm alive");
    });
    

    但答案是,是的,您确实需要包含 cordova.js 才能让它在 Ripple 中运行。

    【讨论】:

      【解决方案2】:

      Cordova-SQLitePlugin 是 HTML5 SQL API 的直接替代品,因此在 Ripple 内部运行时,您无需调用 Cordova 层,只需将 sqlitePlugin.openDatabase() 的调用替换为 window.openDatabase( )。我还没有用 Ripple 测试过这个,但它应该可以工作。有一些数据库大小限制,但这可能是您测试所需的全部内容。

      several ways 可以测试您是否在 Cordova。您可以根据应用启动时对 Cordova 的测试为 openDatabase() 方法创建一个 shim。

      【讨论】:

      • 第二种方式在 Ripple 中对我有用。其他方式不适合模拟器。
      【解决方案3】:

      由于您的主要目标确实是使用 Cordova 对 SQLite 进行快速测试(而不是专门使用 Ripple),我想建议使用 Ripple 的另一种新替代方案。

      我编写了一个应用程序调用Sencha Touch Live,它允许您在移动设备上实时编辑和调试 HTML/JS/CSS 代码,只需更新开发计算机上的文件即可用于快速开发 Cordova/HTML5 应用程序- 所以你可以跳过大多数重新编译/重新部署/重新启动调试器的时间成本。它还有许多其他很酷的功能。我自己用它来测试 SQLite 应用程序,而不是 Ripple 或 Weinre

      它基于 Adob​​e 的 PhoneGap 开发者应用程序的代码,因此核心代码经过了很好的测试。尽管它也适用于 jQuery Mobile 或任何将 HTML5 代码放在 phonegap/www 或 cordova/www 文件夹下的框架,但它已针对 Sench Touch 框架进行了广泛的调整和调整。只需在 PhoneGap 或 Cordova 项目文件夹中启动服务器即可。

      为了测试您的 SQL 和控制器逻辑,我建议使用带有 Android 4.4.x KitKat 版本的 Geny Motion 模拟器。在您的桌面上启动最新版本的 Chrome,一旦您的应用程序在模拟器或真实设备上运行,打开 chrome://inspect,现在您可以在远程设备应用程序上使用完整的 Chrome 调试器。您还可以使用最新版本的 Safari 进行 OSX/iPhone 模拟器测试。

      您可以在此处观看演示(从 5 分钟开始)。是的!它需要一个更精致、回声更少的视频,但你会明白的:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-10
        • 2012-08-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多