2016-07-14 24 views
1

Ich benutze Realm, um Elemente zu speichern, die später in einer ListView angezeigt werden. Die Elemente verfügen über eine Schaltfläche zum Löschen. Wenn der Benutzer zweimal auf diese Schaltfläche klickt, stürzt die App ab, weil der Bereich angibt, dass das Objekt nicht mehr gültig ist. Gibt es eine elegantere Lösung, als einfach diese Ausnahme zu versuchen und zu ignorieren? HierEntfernen Sie ein einzelnes Objekt aus realm.io android, wenn es noch existiert

ist der Code der onClick-Methode:

@Override 
public void onClick(View view) { 
    Toast.makeText(context, "Timer " + timer.getUUID() + " was stopped.", Toast.LENGTH_SHORT).show(); 
    Realm realm = Realm.getDefaultInstance(); 
    realm.beginTransaction(); 
    RealmResults<Timer> result = realm.where(Timer.class).equalTo("uuid", timer.getUUID()).findAll(); 
    result.deleteAllFromRealm(); 
    realm.commitTransaction(); 
} 
+0

Versuchen Sie, if (result.size()> 0) {// delete all from realm} 'vor' result.deleteAllFromRealm(); 'zu überprüfen. – Lawrance

+0

das ist nicht das Problem, ich habe bereits einen Verweis auf das Objekt, und wenn ich versuche, die UUID zu bekommen, um es zu löschen, das ist der Punkt, wo die Ausnahme ausgelöst wird. –

+0

Löschen Sie den Artikel aus der Listenansicht? damit der Benutzer nicht auf Löschen klicken kann –

Antwort

2

erkannte ich, dass da ich bereits einen Verweis auf das Objekt hatte, ich Realms isValid() Methode verwenden können, lesen Sie meinen Code:

@Override 
public void onClick(View view) { 
    Realm realm = Realm.getDefaultInstance(); 
    realm.beginTransaction(); 
     if (timer.isValid()) { 
      Toast.makeText(context, "Timer " + timer.getUUID() + " was stopped.", Toast.LENGTH_SHORT).show(); 
      timer.deleteFromRealm(); 
     } 
    realm.commitTransaction(); 
} 

ich fand auch die deleteFromRealm() Methode auf RealmObject, dass ich nicht früher aus irgendeinem Grund finden könnte ..
So sollte die richtige Lösung sein:

RealmObject o = someRealmObject; 
realm.beginTransaction(); 
if (o.isValid()) o.deleteFromRealm(); 
realm.commitTransaction();