2016-09-25 6 views
1

Ich habe eine RealmObjectUser, 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); 
     } 
    }); 
+0

Das ist richtig klingt, obwohl ich über die Umsetzung von 'deleteItem' – EpicPandaForce

+0

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

+0

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

Antwort

2

Ja, das ist richtig. Sie können nicht auf ein Objekt in mehreren Threads zugreifen. Wenn Sie also einen Verweis auf die ID speichern und das Objekt erneut verwenden möchten, ist dies der richtige Ansatz.

Verwandte Themen