Her 5 saniyede bir çalıştırmak gibi bir güçlendirme ağ çağrısı var. Benim geçerli kod:Retrofit "IllegalStateException: Zaten uygulandı"
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);
Bu kez çalışır, ancak sonra aşağıdaki atar:
java.lang.IllegalStateException: Zaten idam. orbyt.project.MyFragment $ 1.run de retrofit2.ExecutorCallAdapterFactory $ ExecutorCallbackCall.enqueue de retrofit2.OkHttpCall.enqueue (OkHttpCall.java:52) (ExecutorCallAdapterFactory.java:57) de (MyFragment.java:93)
Sorun nedir?
Bir bonus olarak: Bunu işlemenin daha iyi bir yolu nedir? Her güncellemede bir harita güncelleniyor. Rx kullanmaya çalışmayı düşünüyordum, ancak bunun uygun bir kullanım durumu ya da nasıl uygulanacağından emin değilim.
ağ görüşmelerinizin 5 saniyeden uzun sürmesi olasıdır, bu nedenle ikinci yineleme başladığında ilk yineleme henüz tamamlanmadı mı? İlk yineleme sona erdiğinde gecikme başlamaz, ancak ilk yineleme – TooManyEduardos
@TooManyEduardos olarak adlandırdığınız zamandan 5 saniye sonra ilk görüşmenin tamamlandığını biliyorum çünkü yanıtı günlüğe kaydediyorum ve veri alıyorum. – Orbit
ancak günlüğe kaydetme, ağ bağlantısı bitmiş değil, yalnızca alınan verileri gösterir. 5 saniyelik pencerede hala elemanlar kapanıyor olabilir. Bu sadece bir fikir, ancak gecikme süresini 15 saniye kadar artırmayı deneyin ve sorunun giderilip giderilmediğine bakın. – TooManyEduardos