Phonegap本地存储返回空结果

时间:2013-05-06 21:03:44

标签: javascript android cordova web-sql

在应用程序第一次加载时,我从存储中检索数据(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的脚本链接,并且出现错误。奇怪......我想知道这个错误是否会影响数据库?我正试图发现如何解决这个错误。

2 个答案:

答案 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。