Я пытаюсь сделать асинхронный запись с Realm, и мне нужно передать значения настаиваться методу executeTransaction
так:Невозможно ExecuteTransactionAsync Android Realm
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 могут быть доступны только в потоке, который был создан.
SO мой вопрос в том, как передать параметры в фоновый поток в Realm?
Есть ли необходимость закрыть экземпляр области в onSuccess и onError ?? –
Зависит от вашего прецедента. Царство, переданное в обратном вызове блока транзакций, не должно быть закрыто, так как оно не создано вами. Царство позаботится или оно. Но созданный вами экземпляр перед вызовом 'executeTransactionAsync' должен быть закрыт. Нет необходимости закрывать его в 'onSuccess' /' onError', вы можете создать его сразу после вызова 'executeTransactionAsync'. Или просто следуйте нормальному шаблону, используйте «onCreate' /' onDestroy' для активности 'getInstance' /' close'. – beeender