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
- Error de autenticación de Token Firebase
- Símbolo de autenticación no válido después de 1 hora - persistencia de disco en Firebase
- Firebase para Android - W / PersistentConnection: pc_0 - Las credenciales de autenticación proporcionadas no son válidas
- Firebase que envía varias notificaciones push en lugar de apilar o reemplazar
- Utilizar DB de Firebase con DB local
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?
- ¿Cómo obtener todos los datos de los niños en la base de datos de firebase?
- onDataChange se llama dos veces en Android Firebase
- Error en la entrada de Facebook de Android
- Entrada duplicada: com / google / firebase / FirebaseApiNotAvailableException.class
- Cómo hacer la vista de mensaje roscado con enviar y recibir mensajes en dos lados con la vista de reciclador
- Logros de Google Play "IOException: Dirección ya en uso"
- Firebase Android onAuthStateChanged () dispara dos veces después de signInWithEmailAndPassword ()
- Leer datos de Firebase tarda mucho incluso con un pequeño conjunto de datos
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