2016-07-22 7 views
1

Realm gibt mir einen Fehler und beschwert sich, dass meine Klasse "mindestens 1 persistables Feld haben muss". Diese Klasse enthält ein statisches Feld zum Speichern einer Voreinstellungsoption in meiner App und einige andere statische Methoden.Statisches Feld wird von Realm Java nicht als persistent erkannt

Verkürzte Code:

public class StreamingPreferences extends RealmObject { 
    public static RealmList<RealmString> serviceStreamingPreferences; 
} 

Realm appears to support static fields und meine benutzerdefinierte RealmString Klasse erweitert RealmObject, wie auch Realmlist. Ich bin komplett neu in Realm und das ist der einzige Teil meines Modells, den ich nicht ohne ein Hinzufügen eines nicht statischen Feldes zum Laufen bringen kann. Irgendwelche Ideen?

+1

Sind Sie sicher, dass die Version von Realm, die Sie verwenden, statische Felder unterstützt? – immibis

+0

Ja, ich verwende Version 1.1 –

+0

Wie sieht Realmstring aus? –

Antwort

0

Fehlermeldung -

Ursachen "mindestens 1 persistierbar Feld enthalten muss" - nur mit statischem Bereich (e) in Ihrer RealmObject Klasse

Grund - zu Realm ermöglicht es uns, haben statische Felder in der RealmObject-Klasse, aber da statische Felder nicht zu einer Instanz der Klasse gehören (sie gehören zur Klasse), haben statische Felder die gleiche Kopie über alle Instanzen der gegebenen Klasse. Da Realm alle statischen Felder ignoriert, akzeptiert es kein RealmObject, das NUR statische Felder hat, wir müssen mindestens ein nicht statisches Feld ALONG mit einem oder mehreren statischen Feldern einfügen.

Geschichte - Wie hier diskutiert https://github.com/realm/realm-java/issues/464, verwendet Realm statische Felder als Teil des RealmObject zu verarbeiten, aber nach der Diskussion Team Realm bereit erklärt, alle statischen Bereich (e) zu ignorieren.

Dies wird

public class Test extends RealmObject { 
    /* One non static filed */ 
    private int test1; 
    /* One or more static filed(s) */ 
    public static int test2; 
} 

public class Test extends RealmObject { 
    /* Only static field(s) */ 
    public static int test1; 
} 
1

Statische Felder Dies ist nicht erlaubt erlaubt im Sinne unterstützt, dass sie in der RealmObject ‚s-Klasse erlaubt sind.

Sie werden automatisch ignoriert, sie bleiben nicht bestehen.

Es ist wie in this comment angegeben.