0

我在我的 android 应用程序中将 ormlite 用于 sqlite 数据库。这是一个基于登录的应用程序,我在 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

寻求帮助。

4

1 回答 1

1

在我看来,你在这里走错了方向。

  • 您假设 DAO 正在为您缓存对象,但除非您在特定 DAO 上启用了对象缓存,否则情况并非如此。
  • DaoManager.clearCache()不会清除对象缓存,而是清除缓存的 DAO 对象。
  • 释放帮助程序后,数据库连接将关闭,这就是您获得IllegalStateException.

我会对您的应用程序进行一些调试或记录一些值以查看问题所在。以下是一些想法:

  • 如果您正在使用对象缓存,您是否尝试过禁用它?您是否尝试过调用Dao.clearObjectCache()来刷新对象缓存?同样,只有在您打开缓存时才会存在缓存。默认情况下未启用。
  • 您使用什么代码来保存登录信息?和其他电话有什么不同吗?
  • 在插入后立即使用Dao.queryRaw()方法转储数据库怎么样?
  • 有什么交易吗?

祝你好运。

于 2011-10-13T17:43:21.077 回答