Estoy enviando un usuario visto por última vez en Firebase Realtime Database y antes de establecer el valor en la base de datos de firebase, estoy generando un registro con la marca de tiempo de System.currentTimeMillis() pero cuando lo comparo con logcat y la marca de tiempo de la base de datos, envía una marca de tiempo diferente en el servidor.
Mire el logcat, muestra la marca de tiempo correcta y también debería estar en el servidor
Disconnect with the firebase server Offline Time 5:01 pm 1639308715905 Firebase Realtime Database Valor de la marca de tiempo 
1639308009264Ambos valores son diferentes, así es como me equivoco por última vez visto por el usuario
1639308715905 - App one 1639308009264 - Server OneEl código que estoy usando para iniciar sesión y establecer un valor en el servidor.
public class MainActivity extends AppCompatActivity { public static final String TAG = "Main Activity"; FirebaseDatabase DatabaseInstance; DatabaseReference infoConnected; @Override protected void onResume() { super.onResume(); Log.d(TAG, "On Resume Running"); DatabaseInstance.goOnline(); } @Override protected void onStop() { super.onStop(); Log.d(TAG, "ON STOP CALLING"); DatabaseInstance.goOffline(); } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); DatabaseInstance = FirebaseDatabase.getInstance(); // Single Instance infoConnected = DatabaseInstance.getReference(".info/connected"); // To check firebase connection state initialiseOnlineStatus(); setContentView(R.layout.main); } private void initialiseOnlineStatus() { final DatabaseReference Online = DatabaseInstance.getReference("Users/" + userID + "/Online"); final DatabaseReference lastOnline = DatabaseInstance.getReference("Users/" + userID + "/lastSeen"); infoConnected.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { boolean connected = dataSnapshot.getValue(Boolean.class); if (connected) { Online.setValue(Boolean.TRUE); lastOnline.removeValue(); Log.d(TAG, "Connected To Firebase Server "); } else { Log.d(TAG, "Disconnect with firebase server "); Online.onDisconnect().setValue(Boolean.FALSE); String offlineTime = String.valueOf(System.currentTimeMillis()); Log.d(TAG, "Offline Time " + App_Functions.getLocalDeviceTimestamp(Long.parseLong(offlineTime)) + " " + offlineTime); // Get local device time from milliseconds lastOnline.onDisconnect().setValue(offlineTime); } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); } }Actualización: noté que la última marca de tiempo (generada por una aplicación) no se está cargando la actual, realmente no entiendo cómo mi último visto no se actualiza con la marca de tiempo actual. Consulte la esencia también para ver el código completo.
También noté que en el lanzamiento de mi actividad, la función firebase llama dos veces, primero con el valor boolean connected = dataSnapshot.getValue(Boolean. class); falso que verdadero. Entonces, con el valor falso, obtengo la primera marca de tiempo que no debería actualizarse cuando la actividad onStop llama y cuando la aplicación llama a onStop , actualiza la marca de tiempo que se creó por primera vez al iniciar la aplicación.
Cuando llamas a esto en tu código:
lastOnline.onDisconnect().setValue(offlineTime);Este envía un valor literal al servidor, con la instrucción de escribir ese valor cuando detecta que el cliente se ha desconectado. El servidor no conoce el significado del valor y no puede modificarlo.
Entonces, si se escribe un valor diferente en el servidor que el que se registra en el cliente, la única razón por la que puedo pensar es que está llamando a onDisconnect (¿en otro lugar?) También con un valor diferente.
System.currentTimeMillis() le dará el tiempo de época de su emulador, es decir, cualquiera que sea el emulador o el tiempo del sistema telefónico, se lo dará