Получение старого объекта Dao в ormlite - PullRequest
0 голосов
/ 03 октября 2011

Я использую ormlite для базы данных sqlite в моем приложении для Android. Это приложение для входа в систему, и у меня есть база данных на SD-карте. Для пользователя abc требуется следующее: когда пользователь входит в систему под другим пользователем, например xyz, приложение аутентифицирует пользователя с сервера, а сервер заменяет базу данных для пользователя xyz. Но когда я пытаюсь получить доступ к учетным данным, он дает старые учетные данные, а база данных отражает новые учетные данные.

Я тоже пробовал:

DaoManager.clearCache();

Не работает и я попробовал:

DatabaseManager<DatabaseHelper> manager = new DatabaseManager<DatabaseHelper>();
manager.releaseHelper(DatabaseHelperGenerator.getDataBaseHelperInstance())

После этого, когда я попытался запустить этот запрос:

Dao<LoginAuthentication, Integer> loginAuthenticationDao = null;
DatabaseHelperGenerator.getDataBaseHelperInstance().
    clearLoginDao(LoginAuthentication.class);
loginAuthenticationDao = DatabaseHelperGenerator.getDataBaseHelperInstance().
    getUserDao(LoginAuthentication.class);
List<LoginAuthentication> loginAuthenticationList =
    loginAuthenticationDao.queryForAll();

Это дает IllegalStateException :Database not open

Требуется помощь.

1 Ответ

1 голос
/ 13 октября 2011

Мне кажется, что вы идете в неправильном направлении.

  • Вы предполагаете, что DAO кеширует объекты для вас, но если вы не включили кэш объектов в определенном DAO, то этоне тот случай.
  • DaoManager.clearCache () не очищает кеши объектов, а вместо этого очищает кэшированные объекты DAO.
  • После освобождения помощника соединение с базой данныхзакрыт, что является причиной, по которой вы получаете IllegalStateException.

Я бы сделал некоторую отладку вашего приложения или какую-то запись значений, чтобы увидеть, в чем проблема.Вот некоторые мысли:

  • Если вы используете кэш объектов, пытались ли вы его отключить?Вы пытались очистить кеш объекта, вызвав Dao.clearObjectCache () ?Опять же, кеш будет существовать, только если вы его включили.По умолчанию он не включен.
  • Какой код используется для сохранения информации для входа?Что-нибудь отличное от других вызовов?
  • Как насчет использования методов Dao.queryRaw () для выгрузки базы данных сразу после вставки?
  • Любые транзакции?

Удачи.

...