我正在开发基于cordova的混合移动应用程序,使用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);
}
function 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);
}
现在,我正在获得一个弹出窗口“I haz 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);
}
}
}
};
我发现结果是未定义的,因此当它试图找到时
last = result.length - 1;
它是thrwing异常,找不到undefined的长度。
纹波错误
![SQLiteplugin.js文件的例外] [1]
答案 0 :(得分:1)
插件io.litehelpers.cordova.sqlite提供了一个原生 SQLite数据库的接口。这意味着对于每个支持的平台(Android,iOS,Windows等),插件的JS部分都会调用本机代码。
Ripple是一个支持大多数Cordova / Phonegap API但不是实际平台的模拟器,因此它无法执行本机代码。
因此,当您看到“I haz Cheeseburger”消息时,Ripple实际上是在说“您正在调用一些我无法理解的本机代码”。
换句话说,你不能使用在Ripple中调用本机代码的这个(或任何)插件。
如果你想在Ripple中测试数据库,你最好的办法是在Ripple环境中添加一些条件逻辑来使用WebSQL数据库,因为它的接口与通过插件的原生SQLite数据库相同。