//Based on http://www.html5rocks.com/en/tutorials/webdatabase/todo/
document.addEventListener("deviceready", init, false);
var app = {};
app.db = null;
app.openDb = function() {
if(window.sqlitePlugin !== undefined) {
app.db = window.sqlitePlugin.openDatabase("CALCMENU");
alert("SQLITE");
} else {
// For debugin in simulator fallback to native SQL Lite
console.log("Use built in SQL Lite");
app.db = window.openDatabase("CALCMENU", "1.0", "Cordova Demo", 500000);
}
}
app.createTable = function() {
var db = app.db;
db.transaction(function(tx) {
//code for creating
});
}
//some functions
function init() {
navigator.splashscreen.hide();
app.openDb();
app.createTable();
uuid = device.uuid;
App = new downloadApp();
folderName = "RecipeImages";
App.run(folderName);
$.support.touchOverflow = true;
$.mobile.touchOverflowEnabled = true;
cordova.require('cordova/plugin/powermanagement').acquire(
function() { alert( 'successfully acquired full wake lock' ); })
}
The above code is my whole code in my main.js . When using the sample SQLite apps of Icenium on device, its running that he used SQLite as database. But I applied the codes that I need to the my apps,but when I deploy on device, He used the websql not the SQLite cordova. Am I missing something on my codes?
thanks
Keen
7 Answers, 1 is accepted
Be sure to include the SQLite plug-in into your app, see Enable and Configure Integrated Plugins help article. As you already have a runnable demo at your disposal, you can compare the differences or use that demo as a starting point for your app i.e. add the files for your app into the sqlite demo and continue your development there.
Regards,
Steve
Telerik
Looking for tips & tricks directly from the Icenium team? Check out our blog!
Missed our first webinar, watch it here.
Share feedback and vote for features on our Feedback Portal.
On the two Android devices it fails at this line:
app2.db = window.sqlitePlugin.openDatabase(
"Todo"
);
On the iOS, everything seems to work well except I sometimes get "disk I/O error" when executing this (It seems to always occur when refreshing the app without closing it):
tx.executeSql(
"INSERT INTO todo(todo, added_on) VALUES (?,?)"
,
[
'hello'
,
new
Date()],
app2.onSuccess,
app2.onError);
here is my app.js (which shares some logic for Skin...please dont min the bunch of alert im using to test)
(
function
(global) {
var
mobileSkin =
""
,
app = global.app = global.app || {};
var
app2 = {};
app2.db =
null
;
document.addEventListener(
"deviceready"
,
function
() {
app.application =
new
kendo.mobile.Application(document.body, { layout:
"tabstrip-layout"
});
navigator.splashscreen.hide();
app2.openDb();
app2.createTable();
app2.deleteTodo();
app2.addTodo(
'allo'
);
},
false
);
document.addEventListener(
"touchstart"
,
function
() {},
false
);
app2.openDb =
function
() {
alert(
"opening"
);
if
(device.uuid ==
"e0101010d38bde8e6740011221af335301010333"
|| device.uuid ==
"e0908060g38bde8e6740011221af335301010333"
) {
// For debugin in simulator fallback to native SQL Lite
alert(
"Use built in SQL Lite"
);
app2.db = window.openDatabase(
"Todo"
,
"1.0"
,
"Cordova Demo"
, 200000);
}
else
{
alert(
"sqlitePlugin"
);
app2.db = window.sqlitePlugin.openDatabase(
"Todo"
);
alert(
"OK"
);
}
alert(app2.db);
};
app2.createTable =
function
() {
var
db = app2.db;
alert(
"create"
);
db.transaction(
function
(tx) {
alert(
"create in"
);
tx.executeSql(
"CREATE TABLE IF NOT EXISTS todo(ID INTEGER PRIMARY KEY ASC, todo TEXT, added_on DATETIME)"
, []);
});
alert(
"create out"
);
};
app2.onError =
function
(tx, e) {
alert(
"Error: "
+ e.message);
};
app2.onSuccess =
function
(tx, r) {
alert(
"success"
);
var
render =
function
(tx, rs) {
for
(
var
i = 0; i < rs.rows.length; i++) {
alert(i +
" "
+ rs.rows.item(i));
}
}
var
db = app2.db;
db.transaction(
function
(tx) {
tx.executeSql(
"SELECT * FROM todo"
, [],
render,
app2.onError);
});
};
app2.addTodo =
function
(todoText) {
var
db = app2.db;
alert(
"insert"
);
db.transaction(
function
(tx) {
alert(
"insert in"
);
var
addedOn =
new
Date();
tx.executeSql(
"INSERT INTO todo(todo, added_on) VALUES (?,?)"
,
[todoText, addedOn],
app2.onSuccess,
app2.onError);
});
alert(
"insert out"
);
};
app2.deleteTodo =
function
(id) {
var
db = app2.db;
db.transaction(
function
(tx) {
tx.executeSql(
"DELETE FROM todo"
,[]);
});
}
app.changeSkin =
function
(e) {
if
(e.sender.element.text() ===
"Flat"
) {
e.sender.element.text(
"Native"
);
mobileSkin =
"flat"
;
}
else
{
e.sender.element.text(
"Flat"
);
mobileSkin =
""
;
}
app.application.skin(mobileSkin);
};
})(window);
Is there something im doing wrong?
TIA
I've used your t***-*****n app to test locally on Android, but did not notice any errors or problems compared to what I observed in the Icenium simulator in the test tab. Can you share exact steps I need to follow in your app that fail?
Regards,
Steve
Telerik
You've missed the Icenium Visual Studio Integration keynote? It has been recorded and posted here.
Looking for tips & tricks directly from the Icenium team? Check out our blog!
Share feedback and vote for features on our Feedback Portal.
On both of my Android devices, I only have to open the app and two alert should pop at startup. 1-"sqlitePlugin" and 2-"OK". On both devices, I never see the "OK" one, but the same code works for the sample-sqlite (I see the "OK"). Here is the logic:
if
(device.uuid ==
"e0101010d38bde8e6740011221af335301010333"
|| device.uuid ==
"e0908060g38bde8e6740011221af335301010333"
) {
// For debugin in simulator fallback to native SQL Lite
app.db = window.openDatabase(
"Todo"
,
"1.0"
,
"Cordova Demo"
, 200000);
}
else
{
alert(
"sqlitePlugin"
);
app.db = window.sqlitePlugin.openDatabase(
"Todo"
);
alert(
"OK"
);
}
UPDATE2 : ive succeed to make it work (android tablet and iOS only, not android phone) by putting the openDB and createTable back in the app.js like it was... but I need to have this div on the page to make it work:
<
div
data-role
=
"view"
></
div
>
no clue why
Glad you found a working solution. How did you attach deviceready event in your app in a first place? As per Cordova docs, it should be attached in onload event.
Regards,
Steve
Telerik
You've missed the Icenium Visual Studio Integration keynote? It has been recorded and posted here.
Looking for tips & tricks directly from the Icenium team? Check out our blog!
Share feedback and vote for features on our Feedback Portal.
like this
document.addEventListener(
"deviceready"
,
function
() {
app.application =
new
kendo.mobile.Application(document.body, { layout:
"tabstrip-layout"
});
navigator.splashscreen.hide();
app.openDb();
app.createTable();
},
false
);
it is not a real solution since it should work on my android phone (like the sample)