Anonymous
Anonymous

Reputation: 74

Android handler every second does not work

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

Answers (1)

Varun
Varun

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

Related Questions