我使用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
答案 0 :(得分:1)
AsyncTask位于线程池中,考虑到您打开了从未通过getUser()
调用关闭的Realm实例,当您第一次调用getUser()
时,您的Realm版本将被锁定在该版本上。
<强>
return Realm.getInstance(context)
强>。凡(UserRealm.class).findFirst(); //从未关闭
因此,即使您在线程池中的另一个线程上提交了一个事务,也不是所有线程都是最新的(因为您通过打开从未关闭的Realm实例将它们锁定在旧版本上),有时该对象将是空。
解决方案,关闭后台线程上的所有Realm实例(如果由于某种原因这还不够,则关闭force an update。)