मेरे पास एक रेट्रोफिट नेटवर्क कॉल है जो आईडी हर 5 सेकंड को चलाने की तरह है। मेरे वर्तमान कोड:रेट्रोफिट "IllegalStateException: पहले ही निष्पादित"
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);
यह एक बार चलाता है, लेकिन उसके बाद निम्न फेंकता है:
java.lang.IllegalStateException: पहले से ही मार डाला। retrofit2.OkHttpCall.enqueue (OkHttpCall.java:52) retrofit2.ExecutorCallAdapterFactory $ ExecutorCallbackCall.enqueue पर (ExecutorCallAdapterFactory.java:57) orbyt.project.MyFragment $ 1.run पर पर (MyFragment.java:93)
क्या यहाँ मुद्दा?
बोनस के रूप में: इसे संभालने का बेहतर तरीका क्या है? मैं हर अद्यतन एक नक्शा अद्यतन कर रहा हूँ। मैं आरएक्स का उपयोग करने की कोशिश करने के बारे में सोच रहा था लेकिन यह सुनिश्चित नहीं है कि यह उचित उपयोग-मामला है, या इसे कैसे कार्यान्वित किया जाए।
क्या यह संभव है कि आपका नेटवर्क कॉल 5 सेकंड से अधिक समय ले रहा है, इसलिए जब दूसरा पुनरावृत्ति शुरू होता है तो पहला पुनरावृत्ति अभी तक समाप्त नहीं हुआ है? देरी से शुरू नहीं करता है जब पहली यात्रा समाप्त हो गया है, लेकिन समय से 5 सेकंड आप अच्छी तरह से पहली यात्रा – TooManyEduardos
@TooManyEduardos कहा जाता है मैं एक तथ्य यह है क्योंकि मैं प्रतिक्रिया प्रवेश करने पहली कॉल को पूरा करने के लिए कर रहा है पता है, और यह तथ्य हो रही डेटा में हूँ। – Orbit
लेकिन लॉग केवल आपके प्राप्त आंकड़ों से पता चलता है, न कि नेटवर्क कनेक्शन समाप्त हो गया। यह अभी भी 5 सेकंड विंडो के भीतर तत्व बंद हो सकता है। यह सिर्फ एक विचार है, लेकिन 15 सेकंड की तरह हैं और देखते हैं इस मुद्दे को दूर चला जाता है – TooManyEduardos