0
votes

Comment supprimer un objet de royaume spécifique à l'aide de la boucle

Je tente actuellement de supprimer un objet de domaine spécifique dans mon modèle à l'aide de la boucle,

mais chaque fois que j'exécute le deletefromrealm (i) il arrête la boucle et je ne peux plus Supprimer l'autre objet.

Je n'ai essayé aucune autre option. xxx

Chaque fois que j'essaie d'exécuter l'application et exécutez ce code spécifique CashCoundemodels.Deletefromrealm (I); , il arrête la boucle.


0 commentaires

4 Réponses :


0
votes

Vous ne savez pas quelle version du royaume que vous utilisez. Mais depuis 3.0.0, les collections de royaumes sont en direct et sont donc mises à jour immédiatement. Donc, CashCountSscOremodels.SIZE () Retournera un compte moins sur chaque suppression. Dans votre cas, je soupçonne que vous n'avez que 2 entrées dans la collection. Vous voudrez peut-être utiliser orderedrealmcollectionsNapshot code> à la place. Essayez le code suivant.

final Realm realms = Realm.getDefaultInstance();
        realms.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                RealmResults<CashCountScoreModel> cashCountScoreModels = CashCountScoreModel.getAll(realm);
                OrderedRealmCollectionSnapshot snapshot = cashCountScoreModels.createSnapshot();
                for (CashCountScoreModel cashCountScoreModel : snapshot) {
                    if (cashCountScoreModel != null && cashCountScoreModel.isCashOnHand) {
                        Log.d("CheckName : pos -- ",  i +"~~" + cashCountScoreModel.isCashOnHand);
                        Log.d("CheckName : pos --",  i + "~~" + cashCountScoreModel.employeeName);
                        cashCountScoreModel.deleteFromRealm();
                    }
                }
            }
        });


1 commentaires

Il fait que mon CashCoundemodel est un objet, mais ma CashCoundemodel est un modèle de classe.



0
votes

Cela se produit parce que je pense que vous souhaitez supprimer plusieurs objets de royaume à partir d'un seul bloc d'exécution. Essayez le code ci-dessous dans le bloc Execute.

RealmResults<CashCountScoreModel> cashCountScoreModels=realm.where(CashCountScoreModel.class).equalTo(CashCountScoreModel.isCashOnHand,true).findAll();
cashCountScoreModels.deleteAllFromRealm();


1 commentaires

Il a essayé celui-ci et renvoie: requête invalide: champ 'true' introuvable dans la classe 'CashCountemodel'. Mon code est: RealMResults CashCoundemodels = CashcountScoremodel.getall (Royaume); pour (int i = 0; i CashCoundemodelss = Realm.Lower (CashCountScoremodel.class) .equalto (String.valu EOF (CashCountScoremo dels.get (i ) la main deCiscashon), vrai) .Findall (); CashCountSscoremodelsss.DoreallfromrealM (); }



0
votes
realm.executeTransaction(new Realm.Transaction() {
                        @Override
                        public void execute(Realm realm) {
RealmResults<CashCountScoreModel> cashCountScoreModels=realm.where(CashCountScoreModel.class).equalTo(CashCountScoreModel.isCashOnHand,true).findAll();
cashCountScoreModels.deleteAllFromRealm();
}
});
@Md. Nowshad Hasan  is Correct. Just run in Realm Thread.

0 commentaires

1
votes

Vous ne devez pas appeler deletefromrealm (i) code> à l'intérieur d'une boucle car elle provoque toujours des crash. Utilisez ce code à la place:

    realms.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            RealmResults<CashCountScoreModel> results = CashCountScoreModel.getAll(realm);
            results.where().equalTo("isCashOnHand", true).findAll().deleteAllFromRealm();
        }
    });


0 commentaires