2016-08-05 25 views
2

Ich verwende Realm, um meine Werte in der lokalen Datenbank zu speichern.Aktualisieren Sie mehrere Zeilen in der Tabelle mit Realm in Android

Meine Anforderung ist, dass ich ein Feld status=1 basierend auf einer Bedingung ändern muss.

Ich habe folgende Methode versucht, um diese Aufgabe zu erfüllen. Und es funktioniert gut.

RealmResults<NotificationOrder> notificationOrders=realm 
      .where(NotificationOrder.class) 
      .equalTo(RealmConstants.TBL_NOTIFICATION_ORDER.property_id,ConstantMethod.getPreference(getActivity(),UserDefault.kPropertyId)) 
      .equalTo(RealmConstants.TBL_NOTIFICATION_ORDER.status,0) 
      .findAll(); 

    for (NotificationOrder order:notificationOrders) { 
     realm.beginTransaction(); 
     order.setStatus(1); 
     realm.commitTransaction(); 
    } 

Jetzt kann es 1000 solcher Reihen in meinem lokalen db und mit seinem für Schleife einzelne Zeilen zu aktualisieren richtigen Weg scheint nicht.

Also meine Frage: Gibt es eine Möglichkeit wie MYSQL Update-Abfragen in Realm, durch die wir alle Zeilen mit Status = 0 durch einzelne Anweisung aktualisieren können, anstatt einzelne Zeile einzeln zu aktualisieren?

Danke.

+0

Derzeit nein, Sie müssten alle Objekte einzeln aktualisieren. Es gibt ein Problem, das es hier verfolgt: https://github.com/realm/realm-java/issues/762 –

Antwort

2

Wenn ich mich recht wissen, die Objekte in der Transaktion sollen verwaltet werden, so

realm.executeTransaction(new Realm.Transaction() { 
    @Override 
    public void execute(Realm realm) { 
     RealmResults<NotificationOrder> notificationOrders = realm 
      .where(NotificationOrder.class) 
      .equalTo(RealmConstants.TBL_NOTIFICATION_ORDER.property_id,ConstantMethod.getPreference(getActivity(),UserDefault.kPropertyId)) 
      .equalTo(RealmConstants.TBL_NOTIFICATION_ORDER.status,0) 
      .findAll(); 
     for(NotificationOrder order : notificationOrders) { 
      order.setStatus(1); 
     } 
    } 
}); 

ausreichend sein sollte.