Android Room-Fehler: TypeConverter wurde für die Liste der Enums nicht erkannt

8

Die Raumbibliothek erkennt keine TypeConverter , die ich für List enums erstellt habe. Wenn ich dies jedoch zu einem ArrayList von enums ändere, funktioniert es gut. Jeder hat eine Idee warum und was kann ich tun, damit dies mit List funktioniert? (Die Verwendung von List in Kotlin ist einfacher und ich möchte wirklich nicht aus und wieder nach ArrayList konvertieren.)

Hier ist mein Code:

Mein Modell:

%Vor%

DayOfWeek ist eine enum:

%Vor%

Mein TypeConverter :

%Vor%

Und ich habe es in meiner DB-Klasse so eingestellt:

%Vor%

Mein DAO sieht so aus:

%Vor%

Der Fehler, den ich mit diesem Code erhalte, ist:

%Vor%

Wie ich oben sagte, wenn ich die Eigenschaft days in ArrayList<DayOfWeek> ändere (und die Änderungen in ArrayList in DayOfWeekConverter mache), dann funktioniert alles gut. Wenn mir jemand helfen kann, das herauszufinden und mir zu sagen, wie ich List hier verwenden kann, wäre es eine große Hilfe, es macht mich verrückt: /.

    
Franco 17.10.2017, 08:15
quelle

3 Antworten

1

Aus irgendeinem Grund mag Zimmer nicht Kotlin List , aber wenn ich List durch MutableList ersetzt habe, hat es angefangen zu arbeiten:

%Vor%

Dies ist keine perfekte Lösung, aber ich hoffe, Sie können mehr damit untersuchen.

Außerdem müssen Sie @PrimaryKey so ändern, dass keine Nullwerte zulässig sind

    
Tomek Polański 04.01.2018, 14:39
quelle
-1

Wir haben keine Möglichkeit, eine Liste enum ohne Array-Liste zu speichern und zu erhalten. Das Zimmer unterstützt es nicht. Wenn Sie jedoch die Verwendung der Array-Liste vermeiden möchten, können Sie ein Objekt namens ListDayOfWeek erstellen, wobei List ein Attribut ist. Ich habe es ausprobiert und es ist in Ordnung. Wenn Sie Code benötigen, antworten Sie bitte hier. Ich werde es veröffentlichen.

    
GiaLe 24.10.2017 07:42
quelle
-1

Sie sollten es nicht so in Ihrer Datenbank speichern. Erstellen Sie etwas so und speichern Sie es als int:

%Vor%

Schließlich funktioniert Ihr Dienstprogramm, um von / in enum zu konvertieren.

%Vor%

Jetzt können Sie entweder einen int speichern und die Wochentage später abrufen:

%Vor%

oder du verwendest die Enumeration und schreibst einen passenden Typwandler dafür.

%Vor%

Sie können die Enumeration durchlaufen und alle Tage mit

abfragen %Vor%

Code ist nicht getestet, weil ich nicht auf meinem Computer bin, aber das sollte das Konzept zeigen, das besser funktioniert als das Speichern einer Enumeration (was nur ein Alias ​​für einen vordefinierten Wert ist!)

    
Emanuel S 24.10.2017 07:53
quelle