2016-09-29 2 views
0

Мое приложение нуждается в отслеживании в реальном времени, поэтому мне нужна кнопка, которая должна запускаться каждые 5 секунд, но я понятия не имею, как это сделать. Можете ли вы научить меня, как?Кнопка для запуска каждые 5 секунд

Я хочу, чтобы каждые 5 секунд срабатывал AsyncTask.

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"); 
    } 
}); 
+3

http://stackoverflow.com/questions/6531950/how-to-execute-async-task-repeatedly-after-fixed-time-intervals –

ответ

1

Я думаю, что этот код может оказаться полезным для запуска кода каждые 5 второго

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 
       } 
      }); 
     } 
    }; 
} 
+0

Сэр на 'handler.post'' post' является красным цветом sir .... –

+0

Я только что объявил неправильного обработчика сэра. Простите за это. hehe :) –

+0

его хорошо, неважно! надеюсь, что он сработал –

0

Создайте метод, как это и вызовите метод нажатием кнопки, а также вызвать метод с помощью обработчика, как это:

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"); 
} 

поэтому он будет вызывать метод каждые 5 минут и а, задача синхронизации будет выполняться ....

+0

Сэр на 'mHandler.postDelayed'' postDelayed' является цветным красным сэром .... –

0

Я хотел бы иметь CountDownTimer, который будет запускать функцию нажатия кнопки каждые 5 секунд.

CountDownTimer mTimer = new CountDownTimer(50000, 1000) { 

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

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

Я думаю, что время, необходимое для перезапуска таймера, будет: btnStart.performClick() times + 5 s. –

0

Вы можете использовать Таймер с TimerTask и Handler обновить результат основного потока вашего UI то есть.

Что-то вроде этого:

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; 
    } 
} 

Вставьте код обработки в Handler.post(). Затем запустите триггер, вызвав startTimer(). Чтобы остановить триггер, просто позвоните stopTimerTask().

+0

Сэр на handler.post сообщение цвет красный сэр .... –

+0

Вы добавляете 'import android.os.Handler;'? –

Смежные вопросы