2016-07-14 2 views
1

J'utilise un domaine pour stocker des éléments affichés ultérieurement dans un ListView. Les éléments ont un bouton de suppression et si l'utilisateur clique deux fois sur ce bouton, l'application se bloque car le domaine indique que l'objet n'est plus valide pour fonctionner. Y a-t-il une solution plus élégante que d'essayer d'attraper cette exception et de l'ignorer?Supprimer un seul objet de realm.io android s'il existe toujours

Voici le code de la méthode onClick:

@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

Essayez de vérifier 'if (result.size()> 0) {// supprimer tout de domaine}' avant 'result.deleteAllFromRealm();'. – Lawrance

+0

ce n'est pas le problème, j'ai déjà une référence à cet objet, et quand j'essaye d'obtenir l'UUID pour pouvoir le supprimer, c'est le point où l'exception est levée. –

+0

Supprimer l'élément de la liste? l'utilisateur ne peut donc pas cliquer sur –

Répondre

2

j'ai réalisé que depuis que j'avais déjà une référence à cet objet, je pourrais utiliser des royaumes méthode isValid(), voir mon 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(); 
} 

Je trouve aussi la deleteFromRealm() sur RealmObject, que je ne pouvais pas trouver plus tôt pour une raison ..
donc, la solution correcte devrait être:

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