1

在应用程序的第一次加载时,我从存储(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 错误。我刚刚创建了一个带有 jQ​​uery 脚本链接的空白页面,但出现了错误。奇怪...不知道这个错误是否影响数据库?我正在尝试发现如何解决此错误。

4

2 回答 2

1

我之前遇到过与此类似的问题,但我的问题是我试图从 Java 端和 Javascript 端写入同一个数据库。这就是我能够解决它的方法:

  • 首先,我在 Android 模拟器上运行该应用程序并使用 DDMS 访问数据库,这时我意识到这两者是在不同的数据库中编写的。

  • 我从 using 更改WebSQL为使用适当的SQLite数据库,之后我开始获得一致的结果。它是 phonegap 数据库存储实现的直接替代品,因此无需过多更改代码。请参阅https://github.com/brodyspark/PhoneGap-SQLitePlugin-Android

我认为同样重要的是要注意它WebSQL有一些存储限制,所以你最好使用SQLiteWebSQL。请参阅: http: //www.steveworkman.com/html5-2/standards/2011/the-limitations-of-websql-and-offline-apps/

希望这可以帮助 :-)

于 2013-05-16T07:39:42.977 回答
0

我所做的是现在通过 Ajax 加载外部 HTML 页面:

$.mobile.changePage("page2.html");

我也按照建议切换到 pgsqlite。

于 2013-05-09T23:29:05.290 回答