तो सेट कर सकते हैं HTTP कनेक्शन टाइमआउट नहीं करता है, आप बैकग्राउंड थ्रेड में ही टाइमआउट चेकर को लागू कर सकते हैं (AsyncTask, Service, आदि), निम्न श्रेणी एक परीक्षा है अनुकूलित AsyncTask के लिए मिसाल है जो निश्चित अवधि के
public abstract class AsyncTaskWithTimer<Params, Progress, Result> extends
AsyncTask<Params, Progress, Result> {
private static final int HTTP_REQUEST_TIMEOUT = 30000;
@Override
protected Result doInBackground(Params... params) {
createTimeoutListener();
return doInBackgroundImpl(params);
}
private void createTimeoutListener() {
Thread timeout = new Thread() {
public void run() {
Looper.prepare();
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (AsyncTaskWithTimer.this != null
&& AsyncTaskWithTimer.this.getStatus() != Status.FINISHED)
AsyncTaskWithTimer.this.cancel(true);
handler.removeCallbacks(this);
Looper.myLooper().quit();
}
}, HTTP_REQUEST_TIMEOUT);
Looper.loop();
}
};
timeout.start();
}
abstract protected Result doInBackgroundImpl(Params... params);
}
इस
public class AsyncTaskWithTimerSample extends AsyncTaskWithTimer<Void, Void, Void> {
@Override
protected void onCancelled(Void void) {
Log.d(TAG, "Async Task onCancelled With Result");
super.onCancelled(result);
}
@Override
protected void onCancelled() {
Log.d(TAG, "Async Task onCancelled");
super.onCancelled();
}
@Override
protected Void doInBackgroundImpl(Void... params) {
// Do background work
return null;
};
}
स्रोत
2014-12-22 09:31:16
मैं मान को 10 मिनट तक सेट करता हूं। हालांकि यह मुझे 'java.net' फेंकता है। कनेक्ट अपवाद: कनेक्शन का समय समाप्त हो गया है: 2 मिनट से पहले कनेक्ट करें। क्या आपको पता है कि समस्या का कारण क्या है? – Pacerier
@dbyrne यह मेरे लिए थोड़ा उलझन में प्रतीत होता है - चूंकि हम 'HttpURLConnection' ऑब्जेक्ट के निर्माण के बाद टाइमआउट सेट करते हैं, मुझे आश्चर्य है कि कोड में सही जगह क्या है जो' सॉकेटटाइमआउट अपवाद 'उठाएगी? – Less
सॉकेटटाइमआउट अपवाद IOException का उप-वर्ग है। यदि दोनों पकड़ ब्लॉक एक ही काम करते हैं, तो आप केवल IOException पकड़ सकते हैं। – spaaarky21