Android 从另一个线程读取RealmObject
我有一个Android 从另一个线程读取RealmObject,android,realm,Android,Realm,我有一个RealmObjectUser,我将它存储在一个单例中,并在整个应用程序中访问它——它是在UI线程上检索的。该对象表示登录的用户,并且与项类具有一对多关系。在事务中更改时,例如: RealmSingleton.getUserInstance().executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm realm) { User user =
RealmObject
User
,我将它存储在一个单例中,并在整个应用程序中访问它——它是在UI线程上检索的。该对象表示登录的用户,并且与项
类具有一对多关系。在事务中更改时,例如:
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);
}
});
是的,没错。您无法在多个线程上访问对象,因此在您的情况下,存储对ID的引用并使用该引用重新查询对象是正确的方法。听起来不错,尽管我确实对
deleteItem
@EpicPandaForce的实现感到好奇,但它只是一个循环,循环遍历用户的项目
列表,直到找到一个具有匹配类id的项目,当找到匹配项时,它调用RealmList.deleteItemAt
——就是这样。啊,是这样吗?虽然我更喜欢获取元素并对其调用deleteFromRealm
,但它应该可以工作。多奇怪的问题啊。