FindFirst返回null

时间:2015-08-20 00:50:52

标签: android realm

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

登录后,服务器返回数据并创建帐户(AccountManager)并将这些数据保存在应用程序的数据库中,如下所示(当然是在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;
}

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

{ "error": "internal_failure", "error_description": "Unsupported content with type: multipart/form-data; boundary=----------------------------5dd1639f2986" }

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

UserRealm:https://gist.github.com/ppamorim/88f2553a6ff990876bc6

1 个答案:

答案 0 :(得分:1)

AsyncTask位于线程池中,考虑到您打开了从未通过getUser()调用关闭的Realm实例,当您第一次调用getUser()时,您的Realm版本将被锁定在该版本上。

  

<强> return Realm.getInstance(context) 。凡(UserRealm.class).findFirst(); //从未关闭

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

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

相关问题