2016-09-29 6 views
0

Meine App benötigt Tracking in Echtzeit, also brauche ich einen Knopf, der alle 5 Sekunden auslösen muss, aber ich habe keine Ahnung, wie es geht. Kannst du mir beibringen wie?Knopf zum Auslösen alle 5 Sekunden

Ich möchte, dass alle 5 Sekunden AsyncTask ausgelöst wird.

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-wiederholt-nach-fixed-time-intervals –

Antwort

1

ich denke, dieser Code nützlich sein könnte, den Code jeder 5 Sekunden

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

Sir auf 'handler.post' der' post' ist farbe rot sir .... –

+0

ich habe gerade den falschen Handler sir erklärt. Das tut mir leid. hehe :) –

+0

ist es in Ordnung, egal! hoffe, dass es funktioniert hat –

0

Erstellen Sie eine Methode wie diese und die Methode auf die Schaltfläche klicken aufrufen und auch die Methode aufrufen, indem Sie einen Handler wie folgt aus:

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 wird es das Verfahren alle 5 Sekunden aufrufen und die eine Synchronisierungsaufgabe wird ausgeführt ....

+0

Sir auf 'mHandler.postDelayed' die' postDelayed' ist Farbe rot Sir .... –

0

Ich möchte eine CountDownTimer haben, die die Knopfklickfunktion alle 5 Sekunden auslöst.

CountDownTimer mTimer = new CountDownTimer(50000, 1000) { 

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

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

Ich denke, die Zeit benötigt, um den Timer neu zu starten wird: btnStart.performClick() mal + 5 s. –

0

können Sie verwenden Timer mit Timertask und Handler das Ergebnis an Hauptthread d.h UI zu aktualisieren.

Etwas wie folgt aus:

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

Legen Sie die Verarbeitungscode in Handler.post(). Dann starten Sie den Trigger, indem Sie startTimer() aufrufen. Um den Auslöser zu stoppen, rufen Sie einfach stopTimerTask() an.

+0

Sir auf handler.post der Beitrag ist Farbe rot sir .... –

+0

Haben Sie hinzufügen 'importieren android.os.Handler;'? –

Verwandte Themen