无法执行eTransactionAsync Android域

无法执行eTransactionAsync Android域,android,realm,Android,Realm,我正在尝试使用Realm进行异步写入,需要将要持久化的值传递给executeTransaction方法,如下所示: public void updateAsync(final long id, final String title, final String content, final int color) { mRealm.executeTransactionAsync(new Realm.Transaction() { @Override publ

我正在尝试使用Realm进行异步写入,需要将要持久化的值传递给
executeTransaction
方法,如下所示:

public void updateAsync(final long id, final String title, final String content, final int color) {

    mRealm.executeTransactionAsync(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            Note note = getNoteById(id);
            if (note != null){
                note.setTitle(title);
                note.setContent(content);
                note.setColor(color);                    
                realm.copyToRealmOrUpdate(note);
            }

        }
    }, new Realm.Transaction.OnSuccess() {
        @Override
        public void onSuccess() {
            Log.d(LOG_TAG, "Note Updated");
        }
    }, new Realm.Transaction.OnError() {
        @Override
        public void onError(Throwable error) {
            Log.d(LOG_TAG, error.getMessage());
        }
    });


}
上述代码块失败,错误为:从错误线程访问域。领域对象只能在创建它们的线程上访问


所以我的问题是,如何将参数传递到域中的后台线程?

调用
executeTransactionAsync
时,
execute
块将在后台线程中运行,从该线程访问的任何领域对象都需要从属于
execute
参数的领域实例在该线程上创建/查询


您可以使用param
realm
进行查询。只需修改您的
getNoteById(id)
将领域实例作为参数,如
getNoteById(Realm Realm,int id)
,并使用
Realm
进行查询。

是否需要在onSuccess中关闭领域实例,onError??取决于您的用例。事务块回调中传递的领域不必关闭,因为它不是由您创建的。王国会小心的,否则它会死的。但是在调用
executeTransactionAsync
之前创建的实例需要关闭。无需在onSuccess/
onError
中关闭它,您实际上可以在调用
executeTransactionAsync
后立即创建它。或者按照正常模式,使用活动的
onCreate
/
onestroy
执行
getInstance
/
关闭