Ich versuche, einen asynchronen Schreib mit Realm zu tun, und ich brauche, um den Wert zu übergeben, wie dies die executeTransaction
Methode beharrte werden:Kann 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());
}
});
}
Der obige Code-Block mit dem Fehler fehlgeschlagen : Realm Zugriff von falschem Thread. Auf Realm-Objekte kann nur in dem Thread zugegriffen werden, in dem sie erstellt wurden.
SO meine Frage ist, wie kann ich Parameter an den Hintergrund Thread in Realm übergeben?
Müssen Realm-Instanzen in onSuccess und onError geschlossen werden? –
Hängt von Ihrem Anwendungsfall ab. Der im Transaktionsblock-Callback übergebene Realm muss nicht geschlossen werden, da er nicht von Ihnen erstellt wird. Realm wird sich darum kümmern oder es. Die von Ihnen erstellte Instanz vor dem Aufruf von executeTransactionAsync muss jedoch geschlossen werden. Es ist nicht notwendig, es in 'onSuccess' /' onError' zu schließen, Sie können es auch direkt nach dem Aufruf von 'executeTransactionAsync' erzeugen. Oder folge einfach dem normalen Muster, benutze 'onCreate' /' onDestroy' von activity, um 'getInstance' /' close' zu machen. – beeender