पर सॉकेट के लिए टाइमआउट करने में अपाचे एचटीपी क्लाइंट 4.0 विफल रहा है, मैं एक एंड्रॉइड डिवाइस पर काम कर रहा हूं जिसके लिए एंड्रॉइड डिवाइस से एक वेब सर्वर पर फ़ाइल अपलोड करने के लिए एचटीपी क्लाइंट का उपयोग करने की आवश्यकता है। जिस फ़ाइल को मैं अपलोड कर रहा हूं वह 1 जीबी तक के आकार तक पहुंच सकता है, और यदि डिवाइस अपलोड के दौरान कनेक्शन खो देता है तो टाइमआउट हो सकता है। अजीब चीज यह है कि सॉकेट के लिए सेट किए गए टाइमआउट का कोई असर नहीं पड़ता है। जब भी मैं सॉकेटटाइमआउट अपवाद को बढ़ाने के बजाय कनेक्शन खो देता हूं तो एप्लिकेशन बस लटका होगा।एंड्रॉइड
मैं उपयोग करने की कोशिश:
HttpConnectionParams.setConnectionTimeout(params, CrashLogParams.TIMEOUT);
HttpConnectionParams.setSoTimeout(params, CrashLogParams.TIMEOUT);
लेकिन यह केवल कनेक्शन समयबाह्य, नहीं सॉकेट टाइमआउट लिए काम किया। इसके अलावा, मैं करने की कोशिश की:
HttpParams p = httpclient.getParams();
p.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);
p.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);
कारण मुझे पता है कि कनेक्शन समयबाह्य काम करता है, क्योंकि मैं क्रियान्वित
httpclient.execute(httppost);
आवेदन जब कनेक्शन अपलोड करने के दौरान खो दिया है लटका करने लगता है के बाद कनेक्शन समयबाह्य के लिए अपवाद मिलेगा , लेकिन एप्लिकेशन के बाद सर्वर से कनेक्शन सफलतापूर्वक बनाया गया है।
मेरे ऐप का परीक्षण करने के लिए, मैंने विभिन्न समय पर नेटवर्क को अक्षम कर दिया ताकि यह देखने के लिए कि एप्लिकेशन कैसा प्रतिक्रिया देगा। अगर मैं अनुरोध भेजने से पहले नेटवर्क को अक्षम करता हूं, तो मुझे कनेक्शन त्रुटि मिलती है और मेरा एप्लिकेशन उस पर गहन रूप से संभाल सकता है, लेकिन अगर मैं अपलोड के दौरान इसे अक्षम करता हूं तो एप्लिकेशन लटकता है। बेशक मैं इन सभी अनुरोधों को AsyncTasks के माध्यम से कर रहा हूं, इसलिए मुख्य यूआई थ्रेड क्रैश नहीं होता है। मैं बस सोच रहा हूं कि क्या कोई अन्य तरीका यह सुनिश्चित करने के लिए है कि सॉकेट किसी भी डेटा को प्राप्त करने पर समय-समय पर नहीं होगा, या अगर मुझे यहां कुछ याद आ रहा है। मैंने कई ब्लॉग और पोस्ट पढ़े हैं, लेकिन उनमें से ज्यादातर बस SO_TIMEOUT का उपयोग करने का सुझाव देते हैं जो मेरे लिए काम नहीं करता है।
sotimeout not working in a multipart http post on android 2.1
क्या आपके ऐप ने छोटे आकार की फ़ाइल के साथ काम किया है? – momo
मैंने 1 एमबी फाइलों की कोशिश की है और बग अभी भी वहां है।मुझे लगता है कि छोटी फाइलों के साथ आपको फ़ाइल अपलोड के बीच में डिस्कनेक्ट करने की अधिक संभावना होगी, लेकिन यह बिंदु के अलावा है। मैं नेटवर्क विफलताओं की स्थिति में अपना आवेदन मजबूत बनाने में सक्षम होना चाहता हूं। –
मुझे यह वही सटीक समस्या है, सिवाय इसके कि मेरे अपलोड आकार कुछ केबी के क्रम में काफी छोटे हैं। ऐसा लगता है कि यह बग ट्रिगर करने के लिए आवश्यक है, यह जांचने के बाद नेटवर्क नीचे जाने के लिए है कि यह ऊपर है लेकिन मैं execute() को कॉल करने से पहले। – Michael