2013-01-04 18 views
5

मैं जावा मेल एपीआई का उपयोग करके एक अनुलग्नक डाउनलोड कर रहा हूं और जब भी नेटवर्क स्थिति में कोई छोटा बदलाव होता है, तो मेरा ऐप फंस जाता है और मुझे इसे पुनरारंभ करना पड़ता है, यह भी क्रैश नहीं होता है।इनपुटस्ट्रीम - नेटवर्क परिवर्तनों से निपटना

InputStream is = bodyPart.getInputStream(); 

String fileName = MimeUtility.decodeText(bodyPart.getFileName()); 

// Downloading the file 
File f = new File(Constants.getPath() + fileName); 
try { 
    FileOutputStream fos; 
    fos = new FileOutputStream(f); 

    byte[] buf = new byte[8*1024]; 
    int bytesRead; 

    while ((bytesRead = is.read(buf)) != -1) { 
    fos.write(buf, 0, bytesRead); 
    } 
    fos.close(); 
} 

इस मुद्दे से निपटने के लिए सबसे अच्छा तरीका क्या है: यह कोड स्निपेट है? धन्यवाद।

+1

'बुफर्डइनपूटस्ट्रीम' के साथ इनपुट स्ट्रीम को रैपर करने का प्रयास करें और देखें कि 'skip() 'विधि यहां समर्थित है (क्या यह IOException फेंकती है या नहीं)। यदि हां, तो आपके पास पिछले डाउनलोड को फिर से शुरू करने की क्षमता होगी। –

+0

हाय, धन्यवाद, यह IOException फेंक देता है। क्या आप कृपया मुझे बताएंगे कि मैं पिछले डाउनलोड को फिर से कैसे शुरू कर सकता हूं और यह इस तथ्य से कैसे संबंधित है कि ऐप फ्रीज करता है? – Tsikon

+0

यदि यह 'skip()' का समर्थन करता है, तो यह 'पिछले डाउनलोड को फिर से शुरू करने' का समर्थन करेगा। हालांकि, एकमात्र विकल्प मैं सोच सकता हूं कि 'is.read()' पर एक टाइमआउट होना है, और यदि यह टाइमआउट अवधि से अधिक होता है, तो आपको डाउनलोड को समाप्त करना चाहिए और फिर से शुरू करना चाहिए। यह SO प्रश्न देखें: http://stackoverflow.com/questions/804951/is-it-possible-to-read-from-a-inputstream-with-a-timeout –

उत्तर

1

आपका आवेदन अटक गया है। इसका समाधान रीड टाइमआउट सेट करना है, जैसा कि this question में चर्चा की गई है। यदि टाइमआउट होता है तो सॉकेटटाइमआउट अपवाद फेंक दिया जाएगा।

+0

मेरे पास निम्नलिखित सभी टाइमआउट हैं: \t props2.setProperty ("mail.imaps.connectionpooltimeout", "3000"); \t props2.setProperty ("mail.imaps.connectiontimeout", "3000"); \t props2.setProperty ("mail.imap.timeout", "3000"); और संदेश विवरण प्राप्त करते समय भी यह अटक जाता है, उदाहरण के लिए message.getSubject()। आश्चर्यजनक रूप से यह तब होता है जब 3 जी से डब्ल्यूआई-एफआई में स्विच किया जाता है। जब मैं वाई-फाई से 3 जी तक स्विच करता हूं तो यह FolderClosedException फेंकता है और फिर मैं इसे संभाल सकता हूं। – Tsikon

+0

धन्यवाद, मैंने टाइमआउट संपत्ति में नकल करने के लिए imap को बदलकर हल किया। – Tsikon

संबंधित मुद्दे