2016-04-12 3 views
0

Android chat crashes on DataSnapshot.getValue() for timestampСохранение firebase ServerValue.TIMESTAMP на Автозначение POJOs

Я пытаюсь добавить свойство временной метки к моему POJO. Вышеприведенное решение говорит джексону игнорировать действительный элемент данных, который используется приложением. Я использую AutoValue и не могу понять, как я мог бы аннотировать мой класс, чтобы заставить его работать.

@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); 
    } 
} 

Я попытался с помощью пользовательского сериалайзер:

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

но написал строку date: "{.sv=timestamp}" в firebase вместо генерации метки времени

+0

пожалуйста, прочитайте ответ в той ссылке, которую вы уже знаете: «Firebase.ServerValue.TIMESTAMP задается как карта (contai ning {.sv: "timestamp"}), который сообщает Firebase, чтобы заполнить это поле временем сервера. Когда эти данные считываются, это фактическая временная метка unix, которая является Long "(.sv = timestamp - заполнитель, заполненный сервером Firebase, вы должны отправить его в fb, и результат будет содержать ожидаемое время) –

+0

Да, но вместо того, чтобы создавать два POJO, один для записи/сериализации с использованием свойства map и один для чтения с длинным, я хотел бы знать, может ли его аннотировать мой класс autovalue, чтобы он мог его использовать, используя один. –

ответ

0

Поймали мою ошибку:

@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); 
    } 
}