【问题标题】:io.litehelpers.cordova.sqlite sqliteplugin.js with Rippleio.litehelpers.cordova.sqlite sqliteplugin.js 与 Ripple
【发布时间】:2015-07-22 07:07:17
【问题描述】:

我正在使用 VS 2013、sqliteplugin.js (io.litehelpers.cordova.sqlite)、angularjs、jquerymobile、Ripple 开发基于科尔多瓦的混合移动应用程序,以便在开发期间运行应用程序。

我添加了 sqliteplugin,这是我的 index.html 文件

<script src="plugins/io.litehelpers.cordova.sqlite/Lawnchair-adapter/test-www/lib/qunit.js"></script>
<script src="plugins/io.litehelpers.cordova.sqlite/Lawnchair-adapter/test-www/lib/json2.js"></script>
<script src="plugins/io.litehelpers.cordova.sqlite/Lawnchair-adapter/test-www/lib/lawnchair.js"></script>
<script src="plugins/io.litehelpers.cordova.sqlite/www/SQLitePlugin.js"></script>
<script src="plugins/io.litehelpers.cordova.sqlite/Lawnchair-adapter/test-www/Lawnchair-sqlitePlugin.js"></script>
<script src="plugins/io.litehelpers.cordova.sqlite/Lawnchair-adapter/test-www/lawnchair-spec.js"></script>

function onDeviceReady() {
    // Handle the Cordova pause and resume events
    document.addEventListener('pause', onPause.bind(this), false); //jshint ignore:line
    document.addEventListener('resume', onResume.bind(this), false); //jshint ignore:line
    appObj.spa.status.deviceReady = true;
    appObj.spa.status.cordovaReady = appObj.spa.api.cordova.cordovaReady();
    appObj.spa.api.angular.bootstrap();

下面是我创建数据库然后在其中创建表的代码..

    // TODO: Cordova has been loaded. Perform any initialization that requires Cordova here.
    db = window.sqlitePlugin.openDatabase('vitaegodb', '1.0', 'VITAE_Go_Db', 200000);
    db.transaction(createTables, errorCB, successCB);

}

函数 createTables(tx) {

    var createtblActivityCancel = "CREATE TABLE IF NOT EXISTS [tblActivityCancel]([ActivityId] [nvarchar](50) NOT NULL,[DayPlanId] [int] NOT NULL,[WorklistId] [nvarchar](255) NOT NULL,[ResourceId] [int] NOT NULL,[ReasonId] [int] NOT NULL,[Remark] [nvarchar](255) NULL,[ChangeState] [int] NOT NULL,[Synchronized] [bit] NOT NULL,CONSTRAINT [PK_tblActivityCancel] PRIMARY KEY([ActivityId],[DayPlanId]));";


    tx.executeSql(createtblActivityCancel);

}

现在,我收到一个弹出窗口“我喜欢 CheezBurger 吗??”在涟漪中说“我们似乎缺少一些东西:(”

同样在 sqliteplugin.js 文件中,它会在下面的函数中引发异常:

 mycb = function(result) {
  var last, q, r, res, type, _i;
  last = result.length - 1;
  for (i = _i = 0; 0 <= last ? _i <= last : _i >= last; i = 0 <= last ? ++_i : --_i) {
    r = result[i];
    type = r.type;`enter code here`
    res = r.result;
    q = mycbmap[i];
    if (q) {
      if (q[type]) {
        q[type](res);
      }
    }
  }
};

我发现结果是未定义的,因此当它试图找到 最后 = 结果.长度 - 1;
它抛出异常找不到未定义的长度。 纹波误差 ![SQLiteplugin.js 文件异常][1]

【问题讨论】:

    标签: cordova ripple


    【解决方案1】:

    插件io.litehelpers.cordova.sqlite 提供了一个到本机 SQLite 数据库的接口。这意味着对于每个受支持的平台(Android、iOS、Windows 等),插件的 JS 部分都会调用本机代码。

    Ripple 是一个支持大多数 Cordova/Phonegap API 的模拟器,但不是实际平台,因此它无法执行本机代码。

    因此,当您看到“I haz Cheeseburger”消息时,Ripple 实际上是在说“您正在调用一些我无法理解的本地代码”。

    换句话说,你不能使用这个(或任何)在 Ripple 中调用本机代码的插件。

    如果你想在 Ripple 中测试数据库,最好的办法是添加一些条件逻辑以在 Ripple 环境中使用 WebSQL 数据库,因为它的接口与通过插件连接到本机 SQLite DB 的接口相同。

    【讨论】:

    • 但是为什么导致函数是'未定义'?
    • result 未定义,因为这将包含本机代码传递给 Javascript 回调函数的值。但是由于没有任何本机代码可以调用它,所以没有结果。正如我在回答中所说,此插件不适用于 Ripple。
    • 感谢 Dave,将相应地检查和更新帖子。
    猜你喜欢
    • 2017-03-12
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 2013-03-20
    • 2017-05-15
    • 2015-01-17
    • 2014-12-27
    相关资源
    最近更新 更多