Desidero utilizzare auto-value con firebase 9.2.0+. Ho il seguente codice:Come utilizzare il valore automatico con firebase 9.2 in Android
@AutoValue
public abstract class Office {
public static Builder builder() {
return new AutoValue_Office.Builder();
}
public abstract double latitud();
public abstract double longitud();
@AutoValue.Builder
public static abstract class Builder {
public abstract Builder latitud(double latitud);
public abstract Builder longitud(double longitud);
public abstract Office build();
}
}
Ma quando faccio chiamare questo Office office = childDataSnapshot.getValue(Office.class);
sto ottenendo questo errore:
com.google.firebase.database.DatabaseException: No properties to serialize found on class com.example.app.model.Office
Qualcuno ha un'idea perché sto ottenendo questo errore e come risolverlo? Ho letto che Firebase non utilizza più la serializzazione json jackson
. Quindi non sono sicuro di come specificare un tipo di @JsonProperty("latitud")
che ho usato @PropertyName
senza successo.
Ho provato anche rinominare i metodi astratti come public abstract double getLatitud();
e dopo che l'errore è il prossimo:
java.lang.InstantiationException: Can't instantiate abstract class com.example.app.model.Office
quindi non sono sicuro di come risolvere questo.
SOLUZIONE
Grazie alla hatboysam e Frank van Puffelen ho finalmente potuto affrontare questo problema con la soluzione successiva.
- Ho creato un FirebaseUtil enum con due metodi per serializzare e deserializzare oggetti per Firebase basate su hatboysam risposta e Frank van Puffelen commento.
- Creo un paio di classi
User
ePhone
per il test. Dipendenze: esempio
compile 'com.fasterxml.jackson.core:jackson-annotations:2.8.0' compile 'com.fasterxml.jackson.core:jackson-databind:2.8.0'
Usage:
User user = FirebaseUtil.deserialize(dataSnapshot, User.class); Map<String, Object> map = FirebaseUtil.serialize(user);
Una domanda: qual è lo scopo che sta dietro all'uso Auto-valore? Per rendere Parcelable? –