2016-04-20 14 views
29

Chcę usunąć obiekt wiadomość od sfery te są równe id_uzytkownikaJak usunąć obiekt z 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(); 

Odpowiedz

77

W 0.88.3 i poniżej można zrobić:

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(); 
    } 
}); 

Od 0.89 (następny release) to będzie deleteAllFromRealm() zamiast .

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

Wystarczy FYI byłoby miło, gdyby nie było komentarz w przestarzałej '.clear()' '.deleteAllFromRealm metoda()' jest teraz poprawną metodą użycia. –

+0

@EddieLee to w [dzienniku zmian 0.89.0] (https://github.com/realm/realm-java/blob/master/CHANGELOG.md#0890) – EpicPandaForce

+0

Wyobraź sobie, że mamy inny model, który ma 'RealmList ' . Jeśli w jakiś sposób usuniemy całe wiersze 'Message', czy to również zostanie usunięte w tym modelu? (Proszę spojrzeć na https://stackoverflow.com/questions/49029813/realm-the-size-of-filled-realmlist-in-realmobject-is-zero). –

3

Należy to zrobić między realm.beginTransaction(); oraz realm.commitTransaction(); Podałem również w przykładzie kodu kilka argumentów().

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

Chcesz wyjaśnić swój kod? – CinCout

+1

'removeFromRealm()' musi być wykonane w transakcji zapisu (między '.beginTransaction()' & '.commitTransaction()') – muazhud

+0

Podczas gdy ten kod może odpowiedzieć na pytanie, zapewniając dodatkowe [kontekst] (https: //meta.stackexchange .com/q/114762) w odniesieniu do _how_ i/lub _why_ go rozwiązuje, problem poprawiłby długoterminową wartość odpowiedzi. Pamiętaj, że odpowiadasz na pytanie dla czytelników w przyszłości, a nie tylko pytasz teraz! Proszę [edytuj] (http://stackoverflow.com/posts/41421851/edit) swoją odpowiedź, aby dodać wyjaśnienie i podać, jakie ograniczenia i założenia mają zastosowanie. Nie zaszkodzi również wspomnieć, dlaczego ta odpowiedź jest bardziej odpowiednia niż inne. –

2

to jak użyłem go

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

Czy możesz rozwinąć odpowiedź i wyjaśnić, co ten kod robi? Byłoby to pomocne dla przyszłych użytkowników. –