2016-04-12 7 views
0

Android chat crashes on DataSnapshot.getValue() for timestampSaving Feuerbasis ServerValue.TIMESTAMP auf Autovalue POJOs

Ich versuche, einen Zeitstempel-Eigenschaft auf meine POJO hinzuzufügen. Die obige Lösung sagt Jackson, das reale Datenelement zu ignorieren, das von der Anwendung verwendet wird. Ich benutze AutoValue und kann nicht herausfinden, wie ich meine Klasse kommentieren könnte, um sie zum Laufen zu bringen.

@AutoValue 
public abstract class Pojo { 

    @JsonProperty("id") public abstract String id(); 
    @JsonProperty("name") public abstract String name(); 
    @JsonProperty("date") public abstract long date(); 

    @JsonCreator public static Pojo create(String id, String name, long date) { 
     return new AutoValue_Pojo(id, name, date); 
    } 
} 

Ich habe versucht, einen benutzerdefinierten Serializer mit:

public class TimeStampSerializer extends JsonSerializer<Long> { 
    @Override public void serialize(Long value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { 
     jgen.writeString(ServerValue.TIMESTAMP.toString()); 
    } 
} 

aber das schrieb die Zeichenfolge date: "{.sv=timestamp}" auf Firebase statt Erzeugung den Zeitstempels

+0

bitte lesen Die Antwort in dem Link, den Sie bereits kennen: "Firebase.ServerValue.TIMESTAMP wird als Map (conta ning {.sv: "timestamp"}), die Firebase anweist, dieses Feld mit der Serverzeit zu füllen. Wenn diese Daten zurückgelesen werden, ist es der tatsächliche Unix-Zeitstempel, der ein Long ist "(.sv = Zeitstempel ist ein Platzhalter, der vom Firebase-Server ausgefüllt wird, muss an fb gesendet werden und das Ergebnis enthält die erwartete Zeit) –

+0

Ja, aber anstatt zwei POJOs zu machen, einen für Schreib/Serialisierung mit der map -Eigenschaft und einen für Lesevorgänge mit der langen, wollte ich wissen, ob es möglich ist, meine Autovalue-Klasse mit einem Kommentar zu versehen. –

Antwort

0

meinen Fehler Gefangen:

@AutoValue 
public abstract class Pojo { 


    @JsonProperty("id") public abstract String id(); 

    @JsonProperty("name") public abstract String name(); 

    //Custom serializer 
    @JsonSerialize(using = TimestampSerializer.class) @JsonProperty("date") public abstract long date(); 

    @JsonCreator public static Pojo create(@JsonProperty("id") String id, @JsonProperty("name") String name, @JsonProperty("date") long date) { 
     return new AutoValue_Pojo(id, name, date); 
    } 
} 

public class TimestampSerializer extends JsonSerializer<Long> { 
    @Override public void serialize(Long value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { 
     //Use writeObject() instead of writeString() 
     jgen.writeObject(ServerValue.TIMESTAMP); 
    } 
}