【问题标题】:Getting the timestamp wrong firebase android获取时间戳错误的firebase android
【发布时间】:2017-10-06 10:50:56
【问题描述】:

嘿,我试图在单击按钮时获取应用程序中的当前 TIMESTAMP,但 TIMESTAMP 不正确。 TIMESTAMP 有时显示提前时间,有时显示时间前 10 分钟。这是代码

timestapmReference.addValueEventListener(new ValueEventListener() {
    public void onDataChange(DataSnapshot dataSnapshot) {
        final long timeStampLong = (long) dataSnapshot.child("time").child("timestampQuestionSeen").getValue();
        final DatabaseReference questionSeenReference = FirebaseDatabase.getInstance().getReference().child("users").child(uid).child("questions").
                child(imagename);

        questionSeenReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (!dataSnapshot.hasChild("questionSeen")) {

                    questionSeenReference.child("questionSeenTime").setValue(timeStampLong);
                    questionSeenReference.child("questionSeen").setValue("1");


                }
                questionSeenReference.removeEventListener(this);

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
        timestapmReference.removeEventListener(this);
    }


    public void onCancelled(DatabaseError databaseError) {

    }
});
    timestapmReference.child("time").child("timestampQuestionSeen").setValue(ServerValue.TIMESTAMP);

【问题讨论】:

  • 您是在模拟器还是在真实设备上测试您的应用?
  • 我正在真实设备上测试它@AlexMamo
  • 使用ServerValue.TIMESTAMP 是设置时间戳的正确方法,正如我所见,您的代码看起来不错。您在手机上设置的日期和时间是否正确?检查您的手机设置并将其与您的计算机时间进行比较。
  • 我已经检查过它在所有地方的正确性,而且时间有时会提前 20 秒并返回 10 分钟,因此如果我的时间不正确,就不会出现这种情况。 @AlexMamo

标签: android firebase firebase-realtime-database timestamp


【解决方案1】:

您的问题是您在 onDataChange 方法中设置了这些值。没有必要做这样的事情。移动这 2 行:

questionSeenReference.child("questionSeenTime").setValue(timeStampLong);                                        
questionSeenReference.child("questionSeen").setValue("1");

在该方法之外并删除该侦听器,因为它没用。要设置一个值,您只需要直接在reference 上使用setValue() 方法即可。

希望对你有帮助。

【讨论】:

  • 我检查了数据库服务器的时间戳中设置的值是错误的
  • 当您使用ServerValue.TIMESTAMP 时,您正在数据库中设置当时的timedate。如果您在 10 分钟后检查,则在您的数据库中,时间戳将保持不变。但为了正确设置,请按照上面的说明进行操作。
  • 但我需要检查用户是否已经看到问题@Alex
  • 好的,在这种情况下,您需要添加一个名为isSeen 类型为boolean 的新字段,如果用户没有看到问题,则设置为false,否则设置为true。您还可以添加另一个timestamp,它代表看到问题的时间。因此,当您将isSeen 字段设置为true 时,您可以同时设置seenTimestamp 与时间和日期,关闭已发生的操作。
  • 时间正好。我实际上是以错误的方式比较它@AlexMamo
猜你喜欢
  • 2016-12-13
  • 2019-02-07
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
相关资源
最近更新 更多