我正在尝试使用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中的后台线程?
答案 0 :(得分:0)
当调用executeTransactionAsync
时,execute
块将在后台线程中运行,需要在该线程上从该Realm实例创建/查询该线程的任何Realm对象访问权限。 execute
。
您可以使用参数realm
进行查询。只需修改您的getNoteById(id)
即可将Realm实例作为getNoteById(Realm realm, int id)
之类的参数,并使用realm
进行查询。