【问题标题】:Phonegap local storage returns empty resultPhonegap 本地存储返回空结果
【发布时间】:2013-05-06 21:03:44
【问题描述】:

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

【问题讨论】:

  • 您是否在表中插入任何记录?
  • @VickyGonsalves 是的,在第一次加载时我插入记录。但是,离开并返回到第一页后,我没有添加任何新记录。这就是为什么它在返回第一页后没有返回任何结果 - 因为它就像是在创建第二个数据库。见编辑。
  • 这在 iOS 上能用吗?
  • @KyawTun 是的,它适用于 iOS 模拟器
  • 您能否对我的库进行快速测试bitbucket.org/ytkyaw/ydn-db/wiki/Home 我没有看到我的库报告的问题。不同的是我使用无版本打开。

标签: javascript android cordova web-sql


【解决方案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/

希望这会有所帮助:-)

【讨论】:

  • 良好的信息和良好的链接。现在我会使用我的解决方案坚持使用 WebSQL,但也许我会在未来切换:)
  • 我遇到了更多数据库问题,所以我刚刚切换到 pgsqlite,到目前为止一切顺利,谢谢。
  • 太棒了。不错的选择,使用 sqlite 不会出错。很高兴您的问题得到了解决;-)
【解决方案2】:

我现在通过 Ajax 加载外部 HTML 页面:

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

我也按照建议切换到 pgsqlite。

【讨论】:

    猜你喜欢
    • 2015-06-03
    • 1970-01-01
    • 2019-06-11
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 2021-03-22
    • 2013-06-21
    相关资源
    最近更新 更多