2017-05-08 4 views
0

Hey ich versuche, die aktuelle TIMESTAMP in der App zu erhalten, wenn Sie auf eine Schaltfläche klicken, aber die TIMESTAMP ist falsch. Der TIMESTAMP zeigt manchmal die Zeit vor und manchmal 10 Minuten vor der Zeit. Hier ist der CodeZeitstempel falsch 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

Testen Sie Ihre App auf einem Emulator oder auf einem echten Gerät? –

+0

Ich teste es auf einem echten Gerät @AlexMamo –

+0

Verwenden von 'ServerValue.TIMESTAMP' ist eine sinnvolle Möglichkeit, den Zeitstempel und wie ich sehe, Ihren Code sieht gut aus. Sind Datum und Uhrzeit auf Ihrem Telefon richtig eingestellt? Überprüfen Sie Ihre Telefoneinstellungen und vergleichen Sie sie mit der Uhrzeit Ihres Computers. –

Antwort

1

Ihr Problem ist, dass Sie diese Werte Insider der onDataChange Methode setzen. Es ist nicht nötig, so etwas zu tun. Verschieben Sie diese 2 Zeilen:

außerhalb dieser Methode und entfernen Sie diesen Listener, weil es nutzlos ist. Um einen Wert festzulegen, müssen Sie nur die Methode setValue() direkt auf der reference verwenden.

Ich hoffe, es hilft.

+0

Ich habe die Datenbank überprüft, der im Zeitstempel vom Server eingestellte Wert ist falsch –

+0

Wenn Sie 'ServerValue.TIMESTAMP' verwenden, setzen Sie in Ihrer Datenbank die 'Zeit' und das 'Datum' dieses Moments. Wenn Sie 10 Minuten später eine Überprüfung durchführen, wird der Zeitstempel in Ihrer Datenbank identisch angezeigt. Aber um es richtig einzustellen, tun Sie bitte wie oben erklärt. –

+0

aber ich würde überprüfen müssen, ob der Benutzer die Frage schon gesehen hat @Alex –

Verwandte Themen