Quiero enviar ayb con obtener URL a example.com cuando lo ejecuto, funciona una vez.
Quiero enviar a y b mientras la condición sea verdadera. Uso el modo de suspensión, así que envío datos después de 5 segundos de forma continua.
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { public a=0,b=0; public btn=2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); connect(); } //end of onCreate public void connect() { new Thread(new Runnable() { @Override public void run() { communication(); } }).start(); } public void communication() { while(btn >0){ try { btn++; a++; b++; URL url = new URL("example.com"+ "?a=" +a+"&b="+b); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.connect(); InputStream inputStream = conn.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String data = "", line = ""; while ((line = bufferedReader.readLine()) != null) { data += line + "\n"; } sleep(5000); } catch (MalformedURLException e) { Log.e("error", e.toString()); e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } }//end of while } //end of communication }//end of classCreo que Timer es mejor que sleep . Puedes probar esto:
Handler handler = new Handler(); Runnable sendRequest = new Runnable() { public void run() { // your code to send request } }; new Timer().schedule(new TimerTask() { @Override public void run() { handler.post(sendRequest); } }, 100, 5000);Recomendaré no hacerlo en la clase Actividad.
Cree una clase de servicio en segundo plano que se ejecute cada n segundos , en su caso digamos 5 .
Ahora crea una cola. En esta cola, inserte los datos, siempre que la condición sea verdadera.
Una vez que el servicio en segundo plano comience a ejecutarse, leerá de la cola y realizará las llamadas a la API con los datos.