Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android FindFirst返回null_Android_Realm - Fatal编程技术网

Android FindFirst返回null

Android FindFirst返回null,android,realm,Android,Realm,我正在使用Realm为我的应用程序提供数据库。但是 登录后,服务器返回数据,我创建帐户(AccountManager)并将这些数据保存在应用程序的数据库中,如下所示(当然是异步任务): 之后,我关闭LoginActivity,并在MainActivity的onResume上尝试加载用户,如下所示(在异步任务中,再次…): 但是这个返回null,我不知道会发生什么 UserRealm:异步任务位于线程池中,考虑到您打开了从不使用getUser()调用关闭的领域实例,您的领域版本将锁定在您第一次调用

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

登录后,服务器返回数据,我创建帐户(AccountManager)并将这些数据保存在应用程序的数据库中,如下所示(当然是异步任务):

之后,我关闭LoginActivity,并在MainActivity的onResume上尝试加载用户,如下所示(在异步任务中,再次…):

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


UserRealm:

异步任务位于线程池中,考虑到您打开了从不使用
getUser()
调用关闭的领域实例,您的领域版本将锁定在您第一次调用
getUser()
时的版本

返回Realm.getInstance(context)
.where(UserRealm.class).findFirst();//永不关闭

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


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

您可以发布stacktarce…stacktrace没有任何错误或警告…您可以在第一个代码块中写入事务后立即检查查询结果吗?并共享由Realm在build文件夹中生成的
UserRealmRealmProxy.java
。我测试了在该事务后调用getUser(),效果良好,这将返回UserRealm对象…我已经实现了一个解决方法来发送用户实例(UserRealm的包装器,它不是扩展RealmObject,但具有类似的结构)通过EventBus发送到MainActivity以显示用户。但在重新启动应用程序时可能会出现问题。。。
UserRealm userRealm = new UserRealm();
//setter of the userRealm...

Realm realm = Realm.getInstance(context);
realm.beginTransaction();
realm.copyToRealmOrUpdate(userRealm);
realm.commitTransaction();
realm.close();
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;
}