0

デバイス カレンダーを使用する Phonegap/Cordova を使用して Android 用のアプリケーションを作成しています。デバイス カレンダーにイベントを追加するプラグイン (「Calify」) を作成しましたが、これは正常に動作します。ただし、プラグインが返すデバイス カレンダー イベント ID を Web-SQL データベースのレコードに追加しようとしていますが、これにより次のエラーが発生します (Android シミュレーターで実行)。

file:///android_asset/www/cordova-2.2.0.js: Line 1090 : processMessage failed: Message: S01 Calify507282772 s[{"id":191,"calid":615}]
file:///android_asset/www/cordova-2.2.0.js: Line 1091 : processMessage failed: Error: Error: INVALID_STATE_ERR: DOM Exception 11

私のコードは次のようになります。

window.addEvent(function(insertions){
    data = JSON.parse(insertions);
    console.log(insertions);
    event_id = data[0]['calid'];
    id = data[0]['id'];

    tx.executeSql('UPDATE AFSPRAKEN SET eventID=? WHERE id=' + id, [event_id]);
}, [calendarID, [{start: start.getTime(), end: end.getTime(), title: event_title}]]);

「挿入」のログは、「event_id」と「id」を個別に記録するだけでなく、望ましい結果をもたらします。データベースの挿入と関係があるようです(これも非同期です)。この関数はデータベース トランザクション内で実行されることに注意してください。これは、このカレンダー イベント関数の外で他のクエリも実行しているため必要です。挿入クエリをコメント アウトすると、コードがエラーなしで実行されます。

DOM Exception 11 は、オブジェクト (「挿入」だと思いますか?) にアクセスできなくなったことを意味しているようです。おそらくそれと関係があります。

4

1 に答える 1

0

私が犯した間違いは今ではかなり明白だと思うので、Google でこの質問を見つけたすべての人 (エラー メッセージは実際には正しい方向を指していません) のために、私のコードでエラーが発生した理由を次に示します。

データベース トランザクションは、Phonegap プラグインと同様に非同期です。Phonegap 関数はデータベース トランザクションの外部で実行されるため、そのトランザクション内でデータベース クエリを実行することはできません。これはいくつかの方法で解決できます。

  • Phonegap 通信の完全な機能で新しいデータベース トランザクションを開きます
  • 私が行ったように、データベース トランザクションの後に Phonegap プラグインに接続します
于 2013-11-09T18:11:40.027 に答える