我想在设备在线时在数据库中插入数据,如果设备处于离线状态,我想显示存储在数据库中的数据。
目前我在这里解析来自rss feed的数据并在设备联机时将数据插入数据库中,当设备离线时我无法显示相同的数据。我也尝试了很多次在离线状态下显示数据,使用以下代码:
document.addEventListener("offline", yourCallbackFunction, false);
$.each(data.responseData.feed.entries, function (e, item) {
var titles=item.title;
var linked=item.link;
s += '<li><div class="itemTitle"><a href="' + item.link + '" target="' + def.TitleLinkTarget + '" >' + item.title + "</a></div>";
if (def.ShowPubDate) {
i = new Date(item.publishedDate);
s += '<div class="itemDate">' + i.toLocaleDateString() + "</div>";
}
if (def.ShowDesc) {
if (def.DescCharacterLimit > 0 && item.content.length > def.DescCharacterLimit) {
s += '<div class="itemContent">' + item.content.substr(0, def.DescCharacterLimit) + "...</div>";
}
else {
s += '<div class="itemContent">' + item.content + "</div>";
console.log(s);
}
}
// Wait for PhoneGap to load
//
document.addEventListener("deviceready", onDeviceReady, false);
// Populate the database
//
function populateDB(tx) {
tx.executeSql('DROP TABLE IF EXISTS DEMO');
tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (title, desc)');
tx.executeSql('INSERT INTO DEMO (title, desc) Values(?,?)',[titles,s]);
}
// Query the database
//
function queryDB(tx) {
tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
}
// Query the success callback
//
function querySuccess(tx, results) {
var len = results.rows.length;
console.log("DEMO table: " + len + " rows found.");
for (var i=0; i<len; i++){
console.log("Row = " + i + " ID = " + results.rows.item(i).title + " Data = " + results.rows.item(i).desc);
$("#apps ul").append('<li><a href="results.rows.item(i).desc"><span class="tab">' +results.rows.item(i).desc+'</span></a></li>');
}
}
document.addEventListener("offline", querySuccess, false);
答案 0 :(得分:0)
你从“ondeviceready”回调中解雇了这个事件吗?我问,因为这是一个常见的错误,但如果你希望任何人能够看到错误,你需要告诉我们你的代码。 无论如何,你可以使用navigator.connection.type属性,如果你想重新发明轮子,你可以将你的回调函数绑定到当connection.type为none时触发的事件。更多细节: http://docs.phonegap.com/en/2.9.0/cordova_connection_connection.md.html#Connection 也: 你检查数据是否实际存储在本地数据库中? 在寻求任意帮助之前,试着找出问题的确切位置。
答案 1 :(得分:0)
正如我想的那样,在设备准备好之前添加了离线事件监听器,这意味着在从phonegap文件加载添加事件监听器所需的功能之前。写它的正确方法是:
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady(){
document.addEventListener("offline", querySuccess, false);
}