2017-05-08 81 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 –