2016-08-25 2 views
3

Ich muss eine einfache Abfrage in Realm durchführen, eine Liste von MyModel Objekt abrufen und später woanders in meiner App verwenden. Es passiert, dass, sobald ich Realm abfrage, jedes Objekt null Werte hat, aber die toString gibt die erwarteten Werte zurück.Android Realm - findAll gibt Objekte mit null Parametern zurück

Modell:

@RealmClass 
public class MyModel extends RealmObject implements Serializable { 

public static final String KEY_MODEL = "key_myModel"; 

@PrimaryKey 
private int id; 
private String myStr; 
private int myInt; 

//.... getters and setters 

@Override 
public String toString() { 
    return "id = " + id 
      + "\nmyStr = " + myStr 
      + "\nmyInt = " + myInt; 
} 

} 

Wie speichere ich den Wert:

public static void storeModel(MyModel model) { 
     Realm realm = Realm.getDefaultInstance(); 
     realm.beginTransaction(); 
     realm.copyToRealm(model); 
     realm.commitTransaction(); 
    } 

Wie rufe ich die Objekte:

public static RealmList<MyModel> getNewElementsFromIndex(int indexFrom) { 
     Realm realm = Realm.getDefaultInstance(); 
     RealmResults<MyModel> allValues = realm.where(MyModel).greaterThan("id", indexFrom).findAll(); 

     RealmList<MyModel> finalList = new RealmList<MyModel>(); 
     finalList.addAll(allValues.subList(0, allValues.size())); 
     return finalList; 
    } 

Wenn ich getNewElementsFromIndex (Wert) nennen Ich bekomme eine Liste von Artikeln, aber alle Artikel in dieser Liste haben den Par ameter myStr = null und myInt = 0.

Was mache ich falsch?

+0

Warum gibst du nicht 'allValues' zurück? –

+0

Ohne besonderen Grund ... Ich habe immer noch das gleiche Ergebnis -> Null-Parameter innerhalb des Objekts. – Bugdr0id

+0

1.) Sie sollten die RealmResults verwenden, 2.) Sie schließen nicht die Realm-Instanz, die Sie mit 'getInstance()', 3.) öffnen. Was Sie beschreiben, ist dokumentiertes und erwartetes Verhalten. – EpicPandaForce

Antwort

6

Bei verwalteten Realm-Objekten werden Daten nicht in die Felder kopiert. Sie erhalten sie über die Proxy-Getter/Setter-Aufrufe.

Daher ist die Tatsache, dass Felder Null und toString() zeigt die Werte vollständig erwartet und gut dokumentiert Verhalten.

Um die Werte zu sehen, müssen Sie Uhren für die Getter-Methoden hinzufügen.

Siehe die documentation.

Verwandte Themen