FindFirst returns 空

FindFirst returns null

我正在使用 Realm 为我的应用程序提供数据库。但是...

登录后,服务器 returns 数据和我创建帐户(AccountManager)并将这些数据保存在应用程序的数据库中,就像这样(当然是在 AsyncTask 中):

UserRealm userRealm = new UserRealm();
//setter of the userRealm...

Realm realm = Realm.getInstance(context);
realm.beginTransaction();
realm.copyToRealmOrUpdate(userRealm);
realm.commitTransaction();
realm.close();

之后,我关闭了 LoginActivity 并在 MainActivity 的 onResume 上尝试加载用户,就像这样(在 AsyncTask 中,再次...):

public static UserRealm getUser(Context context) {
  try {
    return Realm.getInstance(context).where(UserRealm.class).findFirst();
  } catch (Exception e) {
    if(DebugUtil.DEBUG) { //enabled
      e.printStackTrace();
    }
  }
  return null;
}

但是这个returns null,我不知道它会发生什么。

用户领域:https://gist.github.com/ppamorim/88f2553a6ff990876bc6

AsyncTask 在一个线程池中,并且考虑到您打开了永远不会通过 getUser() 调用关闭的 Realm 实例,您的 Realm 版本将锁定在您第一次调用 getUser() 时的版本。

return Realm.getInstance(context).where(UserRealm.class).findFirst(); // never closed

因此,即使您在线程池中的另一个线程上提交事务,也并非所有线程都是最新的(因为您通过打开永远不会关闭的 Realm 实例将它们锁定在旧版本上),有时对象将为空。

解决方案,关闭后台线程上的所有 Realm 实例(或者 如果由于某种原因这还不够)。