Ich habe eine RealmObject
User
, die ich in einem Singleton speichern und auf die gesamte Anwendung zugreifen - es wurde auf dem UI-Thread abgerufen. Das Objekt stellt den angemeldeten Benutzer dar und hat eine Eins-zu-viele-Beziehung mit der Klasse Item
. Wenn es in einer Transaktion wie bei der Änderung:Lesen eines RealmObject von einem anderen Thread
Das wird nicht funktionieren, weil ich es in der Transaktion den Zugriff auf bin, die in einem anderen Thread auftritt. Nur um zu verdeutlichen, was ich hier tun muss, ist, die ID des Benutzers außerhalb der Transaktion zu speichern und dann auf diese gespeicherte Variable innerhalb der Transaktion zuzugreifen, wenn ich die Abfrage mache, so?
Integer userId = UserSingleton.getUser().getId();
Integer classId = mItem.getClassId();
RealmSingleton.getUserInstance().executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
User user = realm.where(User.class).equalTo("mId",userId).findFirst();
user.deleteItem(classId);
}
});
Das ist richtig klingt, obwohl ich über die Umsetzung von 'deleteItem' – EpicPandaForce
wunderte @EpicPandaForce es die' User' der 'Item' Liste nur eine Schleife ist, dass durchläuft, bis es eine mit einer passenden Klasse-ID findet, und wenn Es findet eine Übereinstimmung, die es 'RealmList.deleteItemAt' nennt - das ist es. – shoe
Ah so https://realm.io/docs/java/latest/api/io/realm/RealmList.html#deleteFromRealm-int-? Während ich es bevorzuge, das Element zu bekommen und 'deleteFromRealm' darauf zu nennen, sollte es dann funktionieren. Was für ein seltsames Problem. – EpicPandaForce