无法执行eTransactionAsync Android域
我正在尝试使用Realm进行异步写入,需要将要持久化的值传递给无法执行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
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
/关闭
。