Я хочу использовать автоматическое значение с firebase 9.2.0+. У меня есть следующий код:
@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();
}
}
Но когда я вызываю это Office office = childDataSnapshot.getValue(Office.class);
, я получаю эту ошибку:
com.google.firebase.database.DatabaseException: No properties to serialize found on class com.example.app.model.Office
У кого-нибудь есть идея, почему я получаю эту ошибку и как ее решить? Я читал, что firebase больше не использует jackson
для сериализации json. Поэтому я не уверен, как указать тип @JsonProperty("latitud")
, который я использовал @PropertyName
безуспешно.
Я также попытался переименовать абстрактные методы, такие как public abstract double getLatitud();
, и после этого ошибка следующая:
java.lang.InstantiationException: Can't instantiate abstract class com.example.app.model.Office
Поэтому я не уверен, как это решить.
РЕШЕНИЕ
Благодаря hatboysam и Frank van Puffelen я, наконец, смог решить эту проблему со следующим решением.
- Я создал перечисление FirebaseUtil с двумя методами сериализации и десериализации объектов для Firebase на основе hatboysam ответ и комментарий Фрэнка ван Пуффелена.
- Я создаю пару классов
User
иPhone
для тестирования. Зависимости:
compile 'com.fasterxml.jackson.core:jackson-annotations:2.8.0' compile 'com.fasterxml.jackson.core:jackson-databind:2.8.0'
Пример использования:
User user = FirebaseUtil.deserialize(dataSnapshot, User.class); Map<String, Object> map = FirebaseUtil.serialize(user);