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
このエラーが発生する理由と解決方法を知っている人はいますか? jacksonfirebase が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のおかげで、最終的に次の解決策でこの問題に直面することができました。
- hatboysam の回答とFrank van Puffelen のコメントに基づいて、Firebase のオブジェクトをシリアル化および逆シリアル化するための 2 つのメソッドを持つFirebaseUtil 列挙型を作成しました。
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);