我有一个RealmObject
User
我存储在一个单例中并在整个应用程序中访问 - 它是在UI线程上检索的。该对象表示登录用户,与Item
类具有一对多关系。在交易中更改时,例如:
RealmSingleton.getUserInstance().executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
User user = realm.where(User.class).equalTo("mId",UserSingleton.getUser().getId()).findFirst();
user.deleteItem(mItem.getClassId());
}
});
这不起作用,因为我在另一个线程中发生的事务中访问它。只是为了澄清一下,我需要做的是将用户的id存储在事务之外,然后在进行查询时访问事务中的存储变量,就像这样?
Integer userId = UserSingleton.getUser().getId();
Integer classId = mItem.getClassId();
RealmSingleton.getUserInstance().executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
User user = realm.where(User.class).equalTo("mId",userId).findFirst();
user.deleteItem(classId);
}
});
答案 0 :(得分:2)
是的,这是正确的。您无法访问多个线程上的对象,因此在您的情况下,存储对ID的引用并使用它来重新查询对象是正确的方法。