Как сохранить новый тип объекта Timestamp Firestore в локальной базе данных Android Room? - PullRequest
0 голосов
/ 24 сентября 2018

Я храню дату в Firestore, используя новый тип объекта, недавно введенный в Firestore, который находится в Timestamp .Я хочу сохранить этот же объект Timestamp в моем Room , работающем на SQLite.

Насколько я знаю, в настоящее время Room не поддерживает метку времени.Но он поддерживает TypeConverter.

Есть ли TypeConverter для преобразования Timestamp.Моя задача - избежать двух разных конверсий дат для Firestore и Room в моем коде.Но поскольку существует ограничение, я не возражаю против использования TypeConverter для преобразования туда и обратно при хранении в Room.Таким образом, я все еще могу использовать метку времени на уровне кода.

Спасибо,

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

a TypeConverter не сможет отобразить два столбца (можно преобразовать только в представление String или Date);можно использовать приведенный ниже класс TimeStamp вместе с аннотацией @Embedded в другом @Entity.в то время как я просто задаюсь вопросом, нужно ли объявлять tableName для этого класса.

// @Entity(tableName = "tableName")
class TimeStamp {

    @ColumnInfo(name = "seconds")
    private long seconds = 0;

    @ColumnInfo(name = "nanoseconds")
    private Integer nanoseconds = 0;       

    public Timestamp() {}

    @Ignore
    public Timestamp(long s, @Nullable Integer ns) {
        this.setSeconds(s);
        this.setNanoSeconds(ns);
    }

    public void setSeconds(long s) {
        if(s < 0) {s = 0;}
        this.seconds = s;
    }

    public void setNanoSeconds(@Nullable Integer ns) {
        if(ns == null || ns < 0) {ns = 0;}
        this.nanoseconds = ns;
    }

    public long getSeconds() {
        return this.seconds;
    }

    public long getMilliSeconds() {
        return (this.seconds * 1000);
    }

    public int getNanoSeconds() {
        return (int) this.nanoseconds;
    }

    public Date toDate() {
        return new Date(this.getMilliSeconds());
    }

    public String toString() {
        return String.valueOf(this.seconds) + "." + String.valueOf(this.nanoseconds);
    }
}
0 голосов
/ 24 сентября 2018

Отметка времени объекты содержат только два целочисленных значения - секунды, начиная с эпохи Unix, и доли секунд (измеряемые в наносекундах), добавленные к этому.Если вам не нужна предельная точность наносекунд, вы можете просто сохранить секунды с момента начала эпохи и предположить, что дробная часть равна 0.

Если вам нужны оба значения, вам нужно отобразить ихв два разных столбца в sqlite.

Насколько я знаю, не существует какой-либо части программного обеспечения, чтобы сделать это для вас, но это должно быть тривиально реализовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...