0

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

目前我在这里解析来自 rss 提要的数据并在设备在线时将数据插入数据库中,当设备离线时我无法显示相同的数据。而且我尝试了很多次离线显示数据,使用以下代码:

    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);
4

2 回答 2

0

正如我所想,在设备准备好之前添加了离线事件侦听器,这意味着在从您的 phonegap 文件加载添加事件侦听器所需的功能之前。正确的写法是:

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady(){
    document.addEventListener("offline", querySuccess, false);
}
于 2013-07-07T14:26:54.010 回答
0

您是否从“ondeviceready”回调中触发了事件?我问是因为这是一个常见的错误,但是如果您希望任何人都能够看到问题所在,您需要向我们展示您的代码。无论如何,您总是可以使用 navigator.connection.type 属性,如果您想重新发明轮子,您可以将回调函数绑定到 connection.type 为 none 时触发的事件。有关更多详细信息: http: //docs.phonegap.com/en/2.9.0/cordova_connection_connection.md.html#Connection 还有:您是否检查过数据是否实际存储在本地数据库中?在寻求任意帮助之前,请尝试准确查看问题所在。

于 2013-07-06T05:06:45.523 回答