在应用程序第一次加载时,我从存储中检索数据(Phonegap的WebSQL存储类型)。 Phonegap存储结果加载正常。直到...
当我转到应用中的另一个页面时:
<a href="page2.html" rel="external">Link</a>
如果我在Javascript中使用window.location.href
从第二页返回到该主页面,我会再次检索WebSQL数据(与之前的功能相同)。
Phonegap Storage调用成功函数(无错误),但使用空结果集。它似乎是从第二个数据库加载,我没有存储任何内容(参见下面的编辑)。
如果我强制退出应用程序并重新打开,则存储再次加载正常,这表明数据库中的结果未被删除。
我在ondeviceready
被解雇后加载存储空间。可能有什么不对?
注意:
1.模拟器上没有发生这种情况。仅发生在真正的 Android 4.0设备上
2.这个应用程序使用jQuery / jQuery Mobile。
function ondeviceready() {
db = window.openDatabase("test", "1.0", "test DB", 2000000);
// . . . //
db.transaction(function(tx) {
tx.executeSql('SELECT * FROM table ORDER BY name', [], querysuccess, function(tx, e) {
errorAlert();
});
}), errorCB;
}
修改: 我现在注意到,如果我在首次加载应用时添加新行,它会存储在一个数据库中。然后,如果我转到第二页然后回到第一页,我又添加了另一行,它还会存储,但存储在一个单独的数据库中!(这就是它似乎正在做的事情) 。太奇怪了,我看到了这种情况。我的所有行都保存并持久化,但查询会返回一组不同的结果,具体取决于我是否转到第二页...
同时 由于某种原因,第二页出现了jQuery错误。我刚创建了一个空白页面,其中包含一个指向jQuery的脚本链接,并且出现错误。奇怪......我想知道这个错误是否会影响数据库?我正试图发现如何解决这个错误。
答案 0 :(得分:1)
我之前遇到过与此类似的问题,但我的问题是我试图从Java端和Javascript端写入同一个数据库。这就是我能够解决它的方法:
首先,我在Android模拟器上运行应用程序并使用DDMS访问数据库,这时我意识到这两个数据库是在不同的数据库中编写的。
我从使用WebSQL
更改为使用正确的SQLite
数据库,之后我开始获得一致的结果。它是phonegap实现数据库存储的直接替代品,因此无需更改代码。请参阅https://github.com/brodyspark/PhoneGap-SQLitePlugin-Android。
我认为同样重要的是要注意WebSQL
存在一些存储限制,因此您最好使用SQLite
WebSQL
。请参阅:http://www.steveworkman.com/html5-2/standards/2011/the-limitations-of-websql-and-offline-apps/
希望这会有所帮助: - )
答案 1 :(得分:0)
我现在所做的是现在通过Ajax加载外部HTML页面:
$.mobile.changePage("page2.html");
我也按照建议切换到了pgsqlite。