在FireBase数据库中使用ServerValue.TIMESTAMP将时间戳保存为负值

时间:2018-08-11 09:34:58

标签: android firebase-realtime-database timestamp

我想以降序将数据保存在firebase数据库中,我发现解决方案是添加一个带有负值的timeStamp字段,但使用 ServerValue.TIMESTAMP 仅将值保存在一种积极的方式,那么如何在FireBase中保存否定的timeStamp:

型号代码:

public class Book{
    Object createdTimestamp;
    String nom_livre;
    String desc_livre;
    String prix_livre;
    String id_book;
    String id_user;

    public Book() {
        super();
    }

    public Book(String nom_livre, String desc_livre, String prix_livre, String id_book,String id_user,  Object createdTimestamp) {
        super();

        this.nom_livre = nom_livre;
        this.desc_livre = desc_livre;
        this.prix_livre = prix_livre;
        this.id_book = id_book;
        this.id_user=id_user;
        this.createdTimestamp=  createdTimestamp;

    }
    @Exclude
    public long getCreatedTimestampLong(){
        return (long)createdTimestamp;
    }

   //other getters and setters
}

在fireBase中添加数据的代码,在我的情况下,我正在addBookActivity上创建一本书:

private void createBook(String nom_livre, String desc_livre,String prix_livre,Object createdTimestamp) {

        bookInfos=new Book(nom_livre,desc_livre,prix_livre,idLivre,id, ServerValue.TIMESTAMP );

            myRefBook.child(idBook).setValue(bookInfos);

    }

enter image description here

1 个答案:

答案 0 :(得分:0)

您有两个选择,在您最初将常规时间戳记号写为正数之后,它们都需要第二次写入数据库。

如果您只想在客户端应用程序上写数据,您可以做的就是像现在一样写createdTimestamp,然后通过侦听您刚刚写的位置,将该值读回客户端。读回后,您将拥有实际的时间戳记值。然后,您可以轻松地计算出负数,然后将其写回所需的位置(如果您正在使用它按相反的时间顺序排序,则可能是revCreatedTimestamp

您的另一种选择是使用Cloud Functions for Firebase编写Realtime Database trigger来响应与位置/books/{book_id}匹配的写入,其中book_id是您为该字符串生成的字符串。书。然后,该触发器可以捕获时间戳并在同一位置写出否定版本。