2013-10-14 1 views
0

Я создаю приложение для Android, используя Phonegap/Cordova, который использует календарь устройства. Я написал плагин («Calify»), который добавляет события в календарь устройства, который отлично работает. Однако я пытаюсь добавить идентификатор события календаря устройства, который возвращается плагином, в запись в базе данных Web-SQL, но это дает мне следующие ошибки (работает в симуляторе Android):Ошибка при добавлении данных из асинхронного запроса в базу данных WebSQL

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» и «идентификатор» по отдельности. Кажется, что это связано с вставкой базы данных (которая также асинхронна). Обратите внимание, что эта функция выполняется в транзакции базы данных, что необходимо, потому что я выполняю некоторые другие запросы, а также вне этой функции события календаря. Комментируя запрос вставки, код запускается без ошибок.

DOM Exception 11 похоже, что объект («вставки», я думаю?) Больше не доступен, возможно, он имеет какое-то отношение к этому.

+0

I» вам удалось обойти это, добавив параметры addEvent в массив, который я повторяю при успешной транзакции базы данных. В этом расширении выполняется функция addEvent, которая создает новую транзакцию базы данных при завершении, чтобы обновить соответствующую запись (записи). Определенный ответ, объясняющий исходное поведение, по-прежнему будет приветствоваться, но я предполагаю, что он вызван асинхронным запросом (функция addEvent), встроенным в другой запрос asynch (транзакция db), с завершением первого запроса, пытающегося запустить что-то в последний. – Tumtum

ответ

0

Я думаю, что ошибка, которую я сделал это довольно очевидно сейчас, так что для каждого найти этот вопрос через Google (сообщение об ошибке на самом деле не указывает в правильном направлении), вот почему мой код дал ошибки:

База транзакция является асинхронной, а также плагинами Phonegap. Функция Phonegap выполняется вне транзакции базы данных, что делает невозможным выполнение запросов к базе данных внутри этой транзакции. Это может быть решена несколькими способами:

  • Открыть новую транзакцию базы данных в полной функции связи PhoneGap
  • Как я сделал, соединиться с плагином PhoneGap после транзакции базы данных
Смежные вопросы