Android-Architekturkomponenten: Verwenden von Enums

8

Ist es möglich, einen Enum-Typ als eingebettetes Feld in einer Entity-Klasse mit der neuen Android Architecture Components und Room Persistence Library zu verwenden?

Meine Entität (mit eingebetteter Enumeration):

%Vor%

Mein Typkonverter:

%Vor%

Wenn ich das kompiliere, erhalte ich eine Fehlermeldung mit dem Fehler 'Fehler: (52, 12) Fehler: Entitäten und Pojos müssen einen verwendbaren öffentlichen Konstruktor haben. Sie können einen leeren Konstruktor oder einen Konstruktor haben, dessen Parameter den Feldern (nach Name und Typ) entsprechen. '

Update 1 Meine SyncEntity-Klasse:

/ **  * Basisklasse für alle Room-Objekte, die synchronisiert werden.  * /

%Vor%     
Bohsen 12.06.2017, 11:44
quelle

2 Antworten

14

Ich kann Enum-Werte bei Room mit TypeConverters verwenden. In Ihrem Code müssen einige Teile geändert werden:

1) Sie müssen die Felder Ihrer Entität veröffentlichen oder sie müssen öffentliche Getters / Setter haben. Oder Sie erhalten unter Fehler:

  

IhrFeld ist nicht öffentlich in YourEntity ; kann nicht von aufgerufen werden   außerhalb des Pakets

2) Sie benötigen die @Embedded Annotation für Ihr status -Feld nicht. Es ist für verschachtelte Objekte. Mehr aus Dokumenten.

3) Sie haben die @TypeConverters Annotation nicht an der richtigen Stelle verwendet. In Ihrem Fall kann es über dem Feld status eingestellt werden. Mehr aus Dokumenten.

4) Sie müssen einen Konstruktor für Ihre Entität definieren oder Sie erhalten den folgenden Fehler:

  

Entitäten und Pojos müssen einen verwendbaren öffentlichen Konstruktor haben. Sie können einen leeren Konstruktor oder einen Konstruktor haben, dessen Parameter den Feldern entsprechen (nach Name und Typ).

Sie können einen leeren Konstruktor definieren, um diesen Fehler zu überspringen.

5) Verwenden Sie int anstelle von Integer in Ihrem TypeConverter.

Summe; unten funktioniert wie erwartet:

%Vor%     
Devrim 13.06.2017, 18:11
quelle
1

Zur Vereinfachung:

%Vor%

dann, Ihre Konverter:

%Vor%     
Chad Bingham 29.01.2018 02:06
quelle