从另一个线程

时间:2016-09-25 03:39:19

标签: android realm

我有一个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);
        }
    });

1 个答案:

答案 0 :(得分:2)

是的,这是正确的。您无法访问多个线程上的对象,因此在您的情况下,存储对ID的引用并使用它来重新查询对象是正确的方法。