Android firebase 9.0.0 setValue para serializar enums
Tengo esta clase haciendo uso de enums. Parsing to Firebase json solía trabajar muy bien – usando Jackson. Durante la migración a firebase-database: 9.0.0 obtengo lo siguiente:
Com.google.firebase.database.DatabaseException: No hay propiedades que se serialicen en la clase … MyClass $ Kind
Donde Kind es el tipo declarado enum. La clase:
public class MyClass { public enum Kind {W,V,U}; private Double value; private Kind kind; /* Dummy Constructor */ public MyClass() {} public Double getValue() { return value; } public void setValue(Double value) { this.value = value; } public Kind getKind() { return kind; } public void setKind(Kind kind) { this.kind = kind; } }
Sospecho que Firebase ya no utiliza Jackson cuando serializa setValue (new MyClass ()).
¿Hay una manera de obtener tipos de enum serializado? ¿O algún medio para ser explícito con respecto al método serializador?
- Firebase Analytic Search_Term El valor del parámetro no se muestra
- Cambio del nombre del paquete Firebase
- FCM - onTokenRefresh () nunca se llama
- ¿Hay una API para * cambiar * Firebase valores de configuración remota?
- Contraseña olvidada en Firebase para Android
- ¿Son posibles datos de consulta que no son iguales a la condición especificada?
- Error de registro de eventos de Firebase Analytics
- ¿Pueden los mensajes de la nube de firebase ser detectados por la aplicación en segundo plano?
Usted tiene razón, base de datos Firebase ya no utiliza Jackson para serialización o deserialización.
Puede representar su enum como una cadena al hablar con Firebase haciendo esto:
public class MyClass { public enum Kind {W,V,U}; private Double value; private Kind kind; /* Dummy Constructor */ public MyClass() {} public Double getValue() { return value; } public void setValue(Double value) { this.value = value; } // The Firebase data mapper will ignore this @Exclude public Kind getKindVal() { return kind; } public String getKind() { // Convert enum to string if (kind == null) { return null; } else { return kind.name(); } } public void setKind(String kindString) { // Get enum from string if (kindString == null) { this.kind = null; } else { this.kind = Kind.valueOf(kindString); } } }
Al igual que un lado de optimización de la respuesta En Android, se recomienda no utilizar Enums. Utilice @StringDef o @IntDef, que podría estar funcionando sin soluciones y optimizado su aplicación para la memoria.
Razonamiento de vídeo muy bonito por qué: https://www.youtube.com/watch?v=Hzs6OBcvNQE
- ¿Cómo cambiar el área de escaneo Zbar?
- Android: No se puede realizar esta acción después de onSaveInstanceState