序章
私は一日中過ごしましたが、電話ギャップアプリケーションで何が起こっているのか理解できません.
私のアプリでは、phonegap のローカル ストレージを使用して、Web ページから取得したニュース メッセージを保存しています。ユーザーがコンテンツをオフラインで視聴できるようにしたいので、これを行っています。
それらがオンラインの場合、アプリは最終更新日を Web サイトに送信するだけで、Web サイトは変更されたレコードのみを送信し、アプリはそれをローカル データベースに再度保存します。
初めてデータをロードするときを除いて、これはすべてかなりうまく機能します。
問題
初めてアプリを起動すると、Web サイトで利用可能なすべてのレコードをデータベースに入力する必要があります。(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とタイトルのみを保存しようとしましたが、これは問題なく機能します。
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++;
}
}