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:
- ¿Cómo crear un Observable en Android?
- Cómo resolver los archivos duplicados copiados en APK META-INF / rxjava.properties
- Combine RxTextView Observable y Retrofit Observable
- MVP de Android con RxAndroid + Retrofit
- RxAndroid debounce google maps en el cambio de cámara
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.
- RxJava + Retrofit -> BaseObservable para llamadas API para manejo centralizado de respuesta
- RxJava: ¿Cómo reanudar el trabajo de un observable si se produce un cambio de configuración?
- Obtenga el código de estado de la respuesta utilizando Retrofit 2.0 y RxJava
- RxJava + RxAndroid WidgetObservable nueva API
- ¡Retrofit! Devolver un tipo genérico observable
- Android rxjava ordenar la lista con la clase de comparación
- Cómo implementar un WebSocket con Retrofit + RX
- RxJava / RxAndroid - maneja varios cambios de EditText
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.
- Error al inflacionar la clase android.webkit.WebView ocurre esporádicamente en la producción
- Cómo cambiar automáticamente entre las páginas de viewPager