Reputation: 74
I have handler in my MainActivity and it works perfectly fine at first but for some reason it suddenly doesn't work it did not repeat the method every second anymore.
private void showElapsedTime() {
SharedPreferences pref = getSharedPreferences("chronometer",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
long elapsedMillis = (SystemClock.elapsedRealtime() - chronometer.getBase())/1000;
editor.putLong("time",elapsedMillis);
Log.d(TAG, "seconds"+elapsedMillis);
editor.commit();
}
@Override
protected void onStart(){
super.onStart();
firebaseauth.addAuthStateListener(authListener);
mChildReference1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange (DataSnapshot dataSnapshot){
String status = dataSnapshot.getValue(String.class);
if (status.equals ("occupied")) {
chronometer.start();
handler1.postDelayed(new Runnable() {
@Override
public void run() {
showElapsedTime();
handler1.postDelayed(this, 1000); //every seconds
}
},0);
else
handler1.removeCallbacksAndMessages(null);
}
Upvotes: 1
Views: 361
Reputation: 214
Try this
private Handler handler = new Handler();
private Runnable runnable;
handler.postDelayed(runnable = new Runnable() {
@Override
public void run() {
handler.postDelayed(runnable, 1000);
}
}, 1000);
You need pass the same runnable object to the second handler inside run function.
Upvotes: 2