【问题标题】:How to fix timestamp java + firestore problems?如何修复时间戳 java + firestore 问题?
【发布时间】:2019-11-29 09:58:32
【问题描述】:

我正在创建一个基于 firestore 和 java android 的聊天应用程序 ,根据https://firebase.google.com/docs/reference/android/com/google/firebase/Timestamp按时间戳对聊天进行排序

但是排序是每次都取决于设备时间,即使设备上的时间是错误的,这让我很失望,请帮忙!!


我的上传时间戳代码:

Timestamp dd= Timestamp.now();
long tt=dd.getSeconds();
        hashMap.put("ServerTimes",tt);

我的下载时间戳代码:

@Override
    public void onBindViewHolder(@NonNull final MessageAdapter.ViewHolder holder, int position) {

Chat chat = mChat.get(position);
       long date = (long) chat.getServerTimes();

        Date date3 = new Date ();
        date3.setTime(date*1000);


        SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yyyy EEE");
        SimpleDateFormat format2 = new SimpleDateFormat("h:mm:s a");

        String dateDisplay1 = format1.format(date3);
        String dateDisplay2 = format2.format(date3);
String DateTime= dateDisplay1+" -- "+dateDisplay2;

我的排序代码:

  private void readMessages(final String myEmail, final String OtherUserEmail, final String imageUrl) {
            final List<Chat> mChat = new ArrayList<>();
    referenceContent.orderBy("ServerTimes", Query.Direction.ASCENDING) .addSnapshotListener(new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
................

【问题讨论】:

    标签: java android google-cloud-firestore timestamp


    【解决方案1】:

    如果您不想依赖客户端时间戳,可以将 Firestore 告知 write a server-side timestamp。从该文档链接:

    // Update the timestamp field with the value from the server
    Map<String,Object> updates = new HashMap<>();
    updates.put("timestamp", FieldValue.serverTimestamp());
    
    docRef.update(updates).addOnCompleteListener(new OnCompleteListener<Void>() {
      ...
    

    【讨论】:

    • 它在 2019 年 7 月 21 日凌晨 12:37:54 U 时保存在 Firestore 中,所以我无法按此值对聊天进行排序
    • 我分享的代码在数据库中保存了一个日期值。这些可以按时间顺序排序,如本关于数据类型的文档中所示:firebase.google.com/docs/firestore/manage-data/…。如果这对您不起作用,请创建一个新问题,在其中显示重现问题的最少代码。这个问题(至少按照我的解释)主要是关于如何防止客户端日期(因为它们本质上是不可靠的),这就是我的回答所显示的。
    • 谢谢你,现在我成功地在最后一步按时间戳排序聊天:referenceContent.orderBy("timestampTest", Query.Direction.ASCENDING)
    猜你喜欢
    • 1970-01-01
    • 2022-07-24
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多