Retrofit "IllegalStateException: Ya ejecutado"

Tengo una llamada de red de Retrofit que me gustaría ejecutar cada 5 segundos. Mi código actual:

Handler h = new Handler(); int delay = 5000; //milliseconds h.postDelayed(new Runnable() { public void run() { call.enqueue(new Callback<ApiResponse>() { @Override public void onResponse(Response<ApiResponse> response) { Log.d("api", "response: " + response.body().getPosition().getLatitude().toString()); } @Override public void onFailure(Throwable t) { } }); h.postDelayed(this, delay); } }, delay); 

Esto se ejecuta una vez, pero luego lanza lo siguiente:

Java.lang.IllegalStateException: Ya se ha ejecutado. En retrofit2.OkHttpCall.enqueue (OkHttpCall.java:52) en retrofit2.ExecutorCallAdapterFactory $ ExecutorCallbackCall.enqueue (ExecutorCallAdapterFactory.java:57) en orbyt.project.MyFragment $ 1.run (MyFragment.java:93)

¿Cuál es el problema aquí?

Como una ventaja: ¿cuál es una mejor manera de manejar esto? Estaré actualizando un mapa cada actualización. Estaba pensando en intentar usar Rx pero no estoy seguro de si este es un caso de uso apropiado, o cómo implementarlo.

Una Call sólo se puede utilizar una vez. Su documentación le dice cómo usar una de varias veces:

Utilice clone() para realizar varias llamadas con los mismos parámetros al mismo servidor web; Esto puede usarse para implementar la interrogación o para reintentar una llamada fallida.

Por lo tanto, use call.clone().enqueue(..) para asegurarse de que tiene una Call nueva y no ejecutada para cada solicitud.

  • ¿Cómo puedo manejar excepciones en map () en un Observable en RxJava
  • Retrofit + RxJava no puede almacenar en caché las respuestas, los encabezados de respuesta sospechados
  • Configuración de RxJava para enviar datos a la actividad de GCMListenerService
  • ¿Es necesario darse de baja?
  • RxAndroid, bus de eventos y ciclo de vida de la actividad
  • RxJava dividir uno Observable a dos subObservables
  • No se puede eliminar la acción javaCompile antigua, tal vez el nombre de la clase ha cambiado
  • Error al resolver la dependencia de RXJava
  • Comprensión de flujos de datos y múltiples suscriptores (con retroadaptación)
  • RxJava Break Chain en Condicional
  • Usando observeOn () el hilo de interfaz de usuario de Android bloquea mi prueba de emulador
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.