介绍
我已经度过了一整天,但我只是不明白我的 phonegap 应用程序中发生了什么。
在我的应用程序中,我使用 phonegap 的本地存储来存储从网页检索到的新闻消息。我这样做是因为我希望用户能够离线观看内容。
当他们上线时,应用程序只会将其最后更新日期发送到网站,网站只会将更改的记录发回,应用程序将其再次存储在本地数据库中。
这一切都很好,除了第一次加载数据时。
问题
当我第一次启动该应用程序时,它需要用网站上可用的所有记录填充数据库。(201 行)但是当我尝试加载超过 39 条消息时,它会创建一个未定义的 sql 错误。
但是,我可以更改 php 脚本,因此它只会发送 39 个结果。应用程序第一次加载后,我可以再次更改脚本,这样它就会发送所有记录,并且可以完美运行。
让问题更加复杂的是,在我的应用程序每次启动时,所有表都会被删除并重新创建(当然这仅用于开发目的,最终版本中不会包含删除)。重新启动应用程序后,它将毫无问题地加载 201 条记录。
要再次重现该问题,我必须完全卸载该应用程序,然后重新安装。
代码
存储结果的代码:
var q = 'INSERT OR REPLACE INTO NIEUWS (id, title, introtext, catid) VALUES (?, ?, ?, ?)';
var len = contents.length;
for (var i=0; i<len; i++){
tx.executeSql(q, [contents[i].id, contents[i].title, contents[i].introtext, contents[i].catid]);
}
启动代码:
tx.executeSql('DROP TABLE IF EXISTS NIEUWS');
tx.executeSql('CREATE TABLE IF NOT EXISTS NIEUWS (id PRIMARY KEY, title TEXT, introtext TEXT, catid INTEGER)');
我真的希望这个问题对你们中的一些人有意义,因为我现在完全迷路了。
提前致谢!
编辑 1 只是试图只保存 id 和 title,这没有任何问题。
var q = 'INSERT OR REPLACE INTO NIEUWS (id, title) VALUES (?, ?)';
var len = contents.length;
for (var i=0; i<len; i++){
tx.executeSql(q, [contents[i].id, contents[i].title]);
}
编辑2 重写代码等待回调,同样的错误仍然存在。
function HandleNewsQuery(tx){
var q = 'INSERT OR REPLACE INTO NIEUWS (id, title, introtext, catid) VALUES (?, ?, ?, ?)';
if(c < contents.length){
tx.executeSql(q, [contents[c].id, contents[c].title, contents[c].introtext, contents[c].catid], HandleNewsQuery, errorCB);
c++;
}
}