2017-06-22 2 views
2

meine Frage ist, wieWie in RoomDatabase Arraylist mit Enum speichern

List<Enum> 

in RoomDatabase zu speichern, so weit ich keine Antwort darauf finden.

+0

mit würde ich schlage vor, "android-room" als Tag zu deiner Frage hinzuzufügen. –

+1

Ich konnte es vorher nicht finden;), danke – murt

+0

Ich habe gepostet meine Antwort auf die Frage, löst es das Problem? Wenn nicht, bitte kommentieren Sie, was Sie brauchen. –

Antwort

1

Enum:

public enum HelloEnum { 
    A, 
    B, 
    C 
} 

Converter:

public class EnumConverter { 

    @TypeConverter 
    public List<HelloEnum> storedStringToEnum(String value) { 
     List<String> dbValues = Arrays.asList(value.split("\\s*,\\s*")); 
     List<HelloEnum> enums = new ArrayList<>(); 

     for (String s: dbValues) 
      enums.add(HelloEnum.valueOf(s)); 

     return enums; 
    } 

    @TypeConverter 
    public String languagesToStoredString(List<HelloEnum> cl) { 
     String value = ""; 

     for (HelloEnum lang : cl) 
      value += lang.name() + ","; 

     return value; 
    }  
} 

In Bezug auf das Einfügen und Ihre Daten zu holen Dies wird funktionieren, keine Fragen gestellt.

Ich würde jedoch darauf hinweisen, dass die Filterung durch enum ein wenig komplizierter wird. Wenn Sie beispielsweise eine Abfrage zum Abrufen von Objekten erstellen möchten, die enum.A und enum.B enthalten, müssen Sie eine Abfrage erstellen, die ein Zeichenfolgenobjekt für sie abfragt. In diesem Fall "SELECT * FROM pojo WHERE enums enthält" A "und" B ". Daher ist es besser, Ihren enums Zahlenwerte zuzuordnen (wie @Kuffs Antwortdetails), da das Analysieren von Ints wahrscheinlich weniger Probleme verursacht als Parsen Saiten.

Hope this löst Ihr Problem. Fühlen Sie sich frei, alle Fragen im Kommentarbereich zu fragen, und glücklich Jagd!

0

Serialisieren Sie Ihre Enums in Ganzzahlen und speichern Sie diese stattdessen.

Beim Abrufen der Werte den umgekehrten Vorgang ausführen.

Beide Operationen sind in meiner Antwort auf diese Frage erklärt:

How to match int to enum

+0

Ok, ich denke besser als String "1", "2", ... und so weiter speichern, daher kann ich mehr als einen enum - guten Punkt speichern. Es erfordert Textplatte ... hym ist es notwendig? – murt

+0

Zeichenfolge oder int. Ist nicht wirklich wichtig. Das Konzept ist das gleiche. – Kuffs

0

Ok mit Kotlin ist viel einfacher, wenn name

class EnumTypeConverter { 

    @TypeConverter 
    fun restoreEnum(enumName: String): EnumType = EnumType.valueOf(enumName) 

    @TypeConverter 
    fun saveEnumToString(enumType: EnumType) = enumType.name 
} 
Verwandte Themen