Ich versuche, eine Listview mit einer Realm-Tabelle verknüpft zu haben, also wenn ein Element zur Tabelle hinzugefügt wird, sollte die Listview aktualisiert werden. Das Problem ist, dass RealmChangeListener nicht aufgerufen wird, wenn das Element hinzugefügt wird.RealmChangeListener nicht aufgerufen
Realm real = RealmController.getInstance(getContext()); // Singleton
RealmResults<Friend> friends = real.where(Friend.class).findAllAsync();
friends.addChangeListener(callback);
RealmChangeListener<RealmResults<Friend>> callback=new RealmChangeListener<RealmResults<Friend>>() {
@Override
public void onChange(RealmResults<Friend> element) {
// This is only called on async completed but not later
}
};
Der Speichervorgang wird in einer retrotif Antwort getan:
new MyService(context).userService().getFriends().enqueue(new Callback<FriendResponse>() {
@Override
public void onResponse(Call<FriendResponse> call, Response<FriendResponse> response) {
Realm realm = RealmController.getInstance(context); // singleton
realm.beginTransaction();
realm.copyToRealmOrUpdate(response.body().friends);
realm.commitTransaction();
}
@Override
public void onFailure(Call<AllInfoResponse> call, Throwable t) {
}
});
Wissen Sie, was geschieht? Irgendein Vorschlag?
Der changelistener wird nicht aufgerufen, wenn du entweder den Realm auf dem UI-Thread geschlossen hast oder wenn deine Freunde RealmResults GC'ed wurden. –
Ich rufe Close nicht explizit an. Tatsächlich hilft das Singleton, eine Live-Instanz zu erhalten. Also sende ich, dass Freunde GC'ed ist, werde ich versuchen, es als Klassenattribut setzen –
@ChristianMelchior, legte ich RealmResults Freunde; als Klassenattribut und es funktioniert! Wenn Sie es als Lösung schreiben, werde ich es als korrekt markieren. –