无法执行TransactionAsync Android领域

时间:2016-05-28 02:00:14

标签: 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
        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());
        }
    });


}

上面的代码块因错误而失败:来自错误线程的Realm访问。 Realm对象只能在创建它们的线程上访问

我的问题是,如何将参数传递给Realm中的后台线程?

1 个答案:

答案 0 :(得分:0)

当调用executeTransactionAsync时,execute块将在后台线程中运行,需要在该线程上从该Realm实例创建/查询该线程的任何Realm对象访问权限。 execute

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