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