2016-04-20 16 views
29

Voglio togliere tutti gli oggetti messaggio dal regno quelli sono pari a useridCome eliminare un oggetto da Realm Database Android?

RealmQuery<Message> rowQuery = realm.where(Message.class).equalTo(Message.USER_ID, userId); 
realm.beginTransaction(); 
//TODO : here I want to remove all messages where userId is equal to "9789273498708475" 
realm.commitTransaction(); 

risposta

77

In 0.88.3 e al di sotto si può fare:

realm.executeTransaction(new Realm.Transaction() { 
    @Override 
    public void execute(Realm realm) { 
     RealmResults<Message> rows = realm.where(Message.class).equalTo(Message.USER_ID,userId).findAll(); 
     rows.clear(); 
    } 
}); 

Da 0.89 (prossima release) questo sarà deleteAllFromRealm() invece .

realm.executeTransaction(new Realm.Transaction() { 
    @Override 
    public void execute(Realm realm) { 
     RealmResults<Message> result = realm.where(Message.class).equalTo(Message.USER_ID,userId).findAll(); 
     result.deleteAllFromRealm(); 
    } 
}); 
+2

Cordiali saluti sarebbe bello se ci fosse un commento nel deprecato '.clear()' 'metodo che .deleteAllFromRealm()' è ora il metodo corretto da usare. –

+0

@EddieLee è nel registro delle modifiche [0.89.0] (https://github.com/realm/realm-java/blob/master/CHANGELOG.md#0890) – EpicPandaForce

+0

Immagina di avere un altro modello che ha 'RealmList ' . Se in qualche modo cancelliamo intere righe 'Message', cancella anche su quel Modello? (Si prega di dare un'occhiata a https://stackoverflow.com/questions/49029813/realm-the-size-of-filled-realmlist-in-realmobject-is-zero) –

3

Questo deve essere fatto tra il realm.beginTransaction(); e il realm.commitTransaction(); Ho anche elencato nell'esempio di codice alcuni argomenti().

realm.beginTransaction(); 
    MessageObject messageobj = realm.where(Message.class) 
          .findFirst() //or 
          .greaterThan("age", 10) // implicit AND 
          .beginGroup() //or you can use 
          .equalTo("name", "Peter") 
          .or() 
          .contains("name", "Jo") 
          .endGroup() 
          .findAll(); 
    messageobj.deleteFromRealm(); 
    realm.commitTransaction(); 
+2

Cura di spiegare il tuo codice? – CinCout

+1

'removeFromRealm()' deve essere eseguito nella transazione di scrittura (tra '.beginTransaction()' & '.commitTransaction() ') – muazhud

+0

Mentre questo codice può rispondere alla domanda, fornendo un ulteriore [contesto] (https: //meta.stackexchange .com/q/114762) per quanto riguarda _how_ e/o _why_ risolve il problema, migliorerebbe il valore a lungo termine della risposta. Ricorda che stai rispondendo alla domanda per i lettori in futuro, non solo la persona che chiede ora! Si prega di [modificare] (http://stackoverflow.com/posts/41421851/edit) la risposta per aggiungere una spiegazione e fornire un'indicazione di quali limitazioni e ipotesi si applicano. Inoltre non fa male menzionare perché questa risposta sia più appropriata di altre. –

2

questo è come l'ho usato

RealmResults<CartDBItems> rows= realm.where(CartDBItems.class).equalTo("id", id).findAll();; 
     rows.deleteAllFromRealm(); 
0
myRealm.beginTransaction(); 

    RealmResults<Datos> datos = myRealm.where(DatosCliente.class) 
         .equalTo("folio",FOLIO) 
         .findAll(); 

datos.deleteAllFromRealm(); 
+0

Puoi per favore elaborare la tua risposta e spiegare cosa fa questo codice? Questo sarebbe utile per i futuri visitatori. –

Problemi correlati