2017-05-08 106 views
0

嘿,我想在应用程序当前点击一个按钮但TIMESTAMP不正确时获取当前TIMESTAMP。 TIMESTAMP有时会显示时间,有时会提前10分钟。这里是代码获取时间戳错误的firebase android

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); 
+0

您是在模拟器上还是在真实设备上测试您的应用程序? –

+0

我在真实设备上测试它@AlexMamo –

+0

使用'ServerValue.TIMESTAMP'是设置时间戳的核心方式,正如我所看到的,您的代码看起来很好。您的日期和时间是否正确设置在您的手机上?检查您的手机设置并将其与计算机的时间进行比较。 –

回答

1

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

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

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

希望它有帮助。

+0

我检查了数据库中服务器时间戳中设置的值是错误的 –

+0

当你使用'ServerValue.TIMESTAMP'时,你在数据库中设置了那个时刻的'time'和'date'。如果您在10分钟后检查,则在数据库中时间戳将保持不变。但为了正确设置,请按照上面的说明进行操作。 –

+0

但我需要检查用户是否已经看到了问题@Alex –