Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

278
Views
El valor de Android System.currentTimeMillis() es diferente en la base de datos de firebase que el generado en la aplicación logcat

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 ingrese la descripción de la imagen aquí

 1639308009264

Ambos valores son diferentes, así es como me equivoco por última vez visto por el usuario

 1639308715905 - App one 1639308009264 - Server One

El 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.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

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.

over 4 years ago · Santiago Trujillo Report

0

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á

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!