Batz Pogi
Batz Pogi

Reputation: 71

Button to trigger every 5 seconds

My app needs tracking of real time so I need a button that needs to trigger every 5 seconds but I have no idea how to do it. Can you teach me how?

I want that in every 5 seconds that AsyncTask will be triggered.

btnStart.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        HashMap postLoc = new HashMap();
        postLoc.put("txtLat", tvLat.getText().toString());
        postLoc.put("txtLng", tvLong.getText().toString());
        postLoc.put("txtOwner", pref.getString("username","").toString());

        PostResponseAsyncTask taskLoc = new PostResponseAsyncTask(getActivity(), postLoc,false,  new AsyncResponse() {
            @Override
            public void processFinish(String s) {
                Log.d(TAG, tvLat.getText().toString());
                Log.d(TAG, tvLong.getText().toString());
                Intent i = new Intent(getActivity(),GPS_Service.class);
                getActivity().startService(i);
            }
        });

        taskLoc.execute("http://carkila.esy.es/carkila/locationUpdate.php");
    }
});

Upvotes: 0

Views: 1387

Answers (4)

ישו אוהב אותך
ישו אוהב אותך

Reputation: 29783

You can use Timer with TimerTask and Handler to update the result to main thread i.e your UI.

Something like this:

Timer timer;
TimerTask timerTask;
//we are going to use a handler to be able to run in our TimerTask
final Handler handler = new Handler();

private void initializeTimerTask() {
  timerTask = new TimerTask() {
    public void run() {
      //use a handler to run process
      handler.post(new Runnable() {
        public void run() {
            /**************************/
            /** Do your process here **/
            /**************************/
        }
      });
    }
  };
}

private void startTimer() {
  //set a new Timer
  timer = new Timer();
  //initialize the TimerTask's job
  initializeTimerTask();
  //schedule the timer, start run TimerTask then run every 5000ms i.e 5 seconds.
  timer.schedule(timerTask, 0, 5000); //
}

private void stopTimerTask() {
  //stop the timer, if it's not already null
  if (timer != null) {
    timer.cancel();
    timer = null;
  }
}

Insert your processing code in Handler.post(). Then start the trigger by calling startTimer(). To stop the trigger, just call stopTimerTask().

Upvotes: 0

Reaz Murshed
Reaz Murshed

Reputation: 24211

I would like to have a CountDownTimer which will trigger the button click function after every 5 seconds.

CountDownTimer mTimer = new CountDownTimer(50000, 1000) {

    public void onTick(long millisUntilFinished) {
        // Do nothing
    }

    public void onFinish() {
        btnStart.performClick();
        this.start();  // Restart
    }
}.start();

Upvotes: 0

Mihir Patel
Mihir Patel

Reputation: 609

I think this code might be useful to trigger the code every 5 second

 Timer timer;
TimerTask timerTask;
final Handler handler = new Handler();
 @Override
public void onCreate() {
    super.onCreate();             
    startTimer();
}

public void startTimer() {
    //set a new Timer
    timer = new Timer();

    //initialize the TimerTask's job
    initializeTimerTask();

    timer.schedule(timerTask, 0, 5000); 
}

public void initializeTimerTask() {
    timerTask = new TimerTask() {
        public void run() {
            handler.post(new Runnable() {
                public void run() {
                   //code to run after every 5 seconds
                }
            });
        }
    };
}

Upvotes: 1

kishan sahu
kishan sahu

Reputation: 151

Create a method like this and call the method on button click and also call the method by using a handler like this:

mRunnable = new Runnable() {
        public void run() {
          public void toBecalled_Every_5_Second();
          mHandler.postDelayed(mRunnable, 5000);
        }
    };
 mHandler.postDelayed(mRunnable, 5000);


public void toBecalled_Every_5_Second(){
PostResponseAsyncTask taskLoc = new PostResponseAsyncTask(getActivity(), postLoc,false,  new AsyncResponse() {
                @Override
                public void processFinish(String s) {
                    Log.d(TAG, tvLat.getText().toString());
                    Log.d(TAG, tvLong.getText().toString());
                    Intent i = new Intent(getActivity(),GPS_Service.class);
                    getActivity().startService(i);
                }
            });
                taskLoc.execute("http://carkila.esy.es/carkila/locationUpdate.php");
}

so it will call the method every 5 second and the a sync task will execute....

Upvotes: 0

Related Questions