Локальное хранилище Phonegap возвращает пустой результат

При первой загрузке приложения я извлекаю данные из хранилища (тип хранилища Phonegap WebSQL). Результаты хранения PhoneGap загружаются нормально. До...

Когда я перехожу на другую страницу в приложении: <a href="page2.html" rel="external">Link</a>

Если я вернусь на эту главную страницу со второй страницы, используя window.location.href в Javascript, я снова извлеку данные 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;
}

EDIT: теперь я заметил, что если я добавляю новую строку при первой загрузке приложения, она сохраняется в одной базе данных. Затем, если я перейду на вторую страницу, а затем вернусь на первую страницу и добавлю еще одну строку, она также сохранится, но в отдельной базе данных! (похоже, именно это она и делает) . Так странно, я вижу, как это происходит. Все мои строки сохраняются и сохраняются, но запрос возвращает другую группу результатов в зависимости от того, перешел ли я на вторую страницу или нет...

Также: На второй странице по какой-то причине возникает ошибка jQuery. Я только что создал пустую страницу со ссылкой скрипта на jQuery, а там ошибка. Странно... Интересно, эта ошибка влияет на базу данных? Я пытаюсь узнать, как решить эту ошибку.


person Hope4You    schedule 06.05.2013    source источник
comment
Вы вставляете какие-либо записи в таблицу?   -  person Vicky Gonsalves    schedule 07.05.2013
comment
@VickyGonsalves да, при первой загрузке я вставляю записи. Однако я не добавлял новых записей после выхода и возвращения на первую страницу. Вот почему он не вернул результатов после возвращения на первую страницу - потому что это похоже на создание второй базы данных. См. редактирование.   -  person Hope4You    schedule 07.05.2013
comment
это работает в iOS?   -  person Kyaw Tun    schedule 10.05.2013
comment
@KyawTun да, это работает на симуляторе iOS   -  person Hope4You    schedule 10.05.2013
comment
Не могли бы вы быстро протестировать мою библиотеку bitbucket.org/ytkyaw/ydn-db/wiki /Home я не вижу сообщений о проблемах с моей библиотекой. отличается тем, что я использую открытие без версии.   -  person Kyaw Tun    schedule 16.05.2013
comment
@KyawTun Я уже пробовал WebSQL без установки версии, и это все равно не сработало.   -  person Hope4You    schedule 17.05.2013


Ответы (2)


Я уже сталкивался с проблемой, похожей на эту, но моя проблема заключалась в том, что я пытался писать в одну и ту же базу данных со стороны 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/

Надеюсь это поможет :-)

person Sthe    schedule 16.05.2013
comment
Хорошая информация и хорошие ссылки. На данный момент я буду использовать WebSQL, используя свое решение, но, возможно, я переключусь в будущем :) - person Hope4You; 17.05.2013
comment
У меня было больше проблем с базой данных, поэтому я просто переключился на pgsqlite, и пока все хорошо, спасибо. - person Hope4You; 22.05.2013
comment
Потрясающий. Хороший выбор, вы не ошибетесь с sqlite. Я рад, что ваша проблема решена ;-) - person Sthe; 23.05.2013

Что я сделал, так это загрузил внешнюю HTML-страницу через Ajax:

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

Я также переключился на pgsqlite в соответствии с рекомендациями.

person Hope4You    schedule 09.05.2013