Phonegap-在线插入数据并使用数据库在离线状态下显示

时间:2013-07-06 04:50:03

标签: javascript jquery cordova

我想在设备在线时在数据库中插入数据,如果设备处于离线状态,我想显示存储在数据库中的数据。

目前我在这里解析来自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);

2 个答案:

答案 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);
}