I need to get status from the server every 10 seconds.
I tried to do this by sending an http request through a service.
The problem is that my code runs only once.
This is the code of my 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); } } }
Thanks a lot Avi
א V י
source share