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,我不知道它会发生什么。
AsyncTask 在一个线程池中,并且考虑到您打开了永远不会通过 getUser()
调用关闭的 Realm 实例,您的 Realm 版本将锁定在您第一次调用 getUser()
时的版本。
return Realm.getInstance(context)
.where(UserRealm.class).findFirst(); // never closed
因此,即使您在线程池中的另一个线程上提交事务,也并非所有线程都是最新的(因为您通过打开永远不会关闭的 Realm 实例将它们锁定在旧版本上),有时对象将为空。
解决方案,关闭后台线程上的所有 Realm 实例(或者 如果由于某种原因这还不够)。
我正在使用 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,我不知道它会发生什么。
AsyncTask 在一个线程池中,并且考虑到您打开了永远不会通过 getUser()
调用关闭的 Realm 实例,您的 Realm 版本将锁定在您第一次调用 getUser()
时的版本。
return Realm.getInstance(context)
.where(UserRealm.class).findFirst(); // never closed
因此,即使您在线程池中的另一个线程上提交事务,也并非所有线程都是最新的(因为您通过打开永远不会关闭的 Realm 实例将它们锁定在旧版本上),有时对象将为空。
解决方案,关闭后台线程上的所有 Realm 实例(或者