Android: Comment envoyer une requête http via le service toutes les 10 secondes
J'ai besoin de recevoir un statut du serveur toutes les 10 secondes.
J'ai essayé de le faire par l'envoi d'une requête http via le service.
Le problème est que mon code s'exécute qu'une seule fois.
C'est le code de mon service:
public class ServiceStatusUpdate extends Service {
@Override
public IBinder onBind(Intent intent) {
//TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
while(true)
{
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
new DoBackgroundTask().execute(Utilities.QUERYstatus);
e.printStackTrace();
}
return START_STICKY;
}
}
private class DoBackgroundTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
String response = "";
String dataToSend = params[0];
Log.i("FROM STATS SERVICE DoBackgroundTask", dataToSend);
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(Utilities.AGENT_URL);
try {
httpPost.setEntity(new StringEntity(dataToSend, "UTF-8"));
//Set up the header types needed to properly transfer JSON
httpPost.setHeader("Content-Type", "application/json");
httpPost.setHeader("Accept-Encoding", "application/json");
httpPost.setHeader("Accept-Language", "en-US");
//Execute POST
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity responseEntity = httpResponse.getEntity();
if (responseEntity != null) {
response = EntityUtils.toString(responseEntity);
} else {
response = "{\"NO DATA:\"NO DATA\"}";
}
} catch (ClientProtocolException e) {
response = "{\"ERROR\":" + e.getMessage().toString() + "}";
} catch (IOException e) {
response = "{\"ERROR\":" + e.getMessage().toString() + "}";
}
return response;
}
@Override
protected void onPostExecute(String result) {
Utilities.STATUS = result;
Log.i("FROM STATUS SERVICE: STATUS IS:", Utilities.STATUS);
super.onPostExecute(result);
}
}
}
Merci beaucoup
Avi
OriginalL'auteur | 2013-10-27
Vous devez vous connecter pour publier un commentaire.
Mettre un gestionnaire à l'intérieur de onPostExecute à envoyer une requête http au bout de 10 secondes
Après 10 secondes doInBackground sera exécuté à nouveau, après que onPostExecute de nouveau, gestionnaire de nouveau et ainsi de suite et ainsi de suite..
OriginalL'auteur null
Vous pouvez simplement utiliser
CountDownTimer
classe android.Espère que ça va vous aider.
OriginalL'auteur Rushabh Patel
La raison, le code ne s'exécute une fois qu'il y a une
return
dans votre boucle de minuterie. Cependant, je te conseille de déplacer la boucle de votre tâche en arrière-plan ou en utilisant l'un de l'autre, les réponses données ici plutôt que de mettre en place une boucle dansonStartCommand()
qui ne revient jamais.OriginalL'auteur Zymurgeek
OriginalL'auteur Vladimir Mamulov
mettre retour START_STICKY;
après tout , et le service de fonctionner correctement
OriginalL'auteur user3325431