2013-10-25 11 views
12

मैं AsyncTaskLoader जो मैं LoaderManager के माध्यम से एक टुकड़ा में बाद में उपयोग का विस्तार कर रहा हूँ। क्या एसिंक कार्य के दौरान होने वाली त्रुटियों को संभालने का सुझाव दिया गया है? मैं पॉपअप संदेश चाहता हूं कि उपयोगकर्ता को इंटरनेट कनेक्शन त्रुटि होने पर रद्द या पुनः प्रयास करने के लिए कहा जाए।कस्टम AsyncTaskLoader में त्रुटियों को कैसे संभालें?

केवल जिस तरह मैं अब के बारे में सोच सकते हैं त्रुटि पर अशक्त लौटने या किसी अन्य जो स्थिति कोड के लिए होता है में भरी हुई वस्तु रैप करने के लिए लोडर बनाना है।

+0

लिखना होगा क्या आपने कभी इसके साथ कहीं भी जाना है? मैं एक ही समस्या की जांच कर चल रहा हूँ कि मैं 'AsyncTask's'' doInBackground' से वापसी मान अब और जांच करने के लिए नहीं है। – theblang

+0

मैं 3 उत्तर के लिए उपयोग करता हूं। – Malachiasz

उत्तर

16

क्या हम अपने पिछले परियोजना में किया था: एक आवरण है कि एक सामान्य और इस तरह एक excpetion रखती बनाएँ: अपने doInBackground(...) में

public class AsyncTaskResult<T> { 
    private final T result; 
    private final Exception error; 
    //getter & setter 
} 

पकड़ने सभी अपवाद और उन्हें परिणाम आवरण (या परिणाम अगर में पैक कोई ग़लती नहीं)। अपने यूआई में रैपर को जांचें यदि यह अपवाद है, तो त्रुटि संदेश के अनुसार दिखाएं, अन्यथा परिणाम के साथ फ़ील्ड को पॉप्युलेट करें।

हमारे लिए यह भी एक अच्छा अभ्यास था कि किस प्रकार के अपवादों को परिभाषित किया गया है (उदाहरण के लिए एक पुनर्प्राप्ति योग्य त्रुटि के साथ अपवाद जहां आप केवल एक संवाद या ऐप विफलता दिखाते हैं जहां आपको उपयोगकर्ता को मुख्य मेनू में लात मारने की आवश्यकता होती है) और केवल इन प्रकार के (अपने asynctask में विशिष्ट पकड़ने पर) फेंक, तो आप अलग अलग अपवाद के सैकड़ों और भी सार अपने त्रुटि हैंडलिंग के साथ परेशान करने के लिए नहीं है। आप सही I18n त्रुटि संदेश के साथ स्ट्रिंग कुंजी भी प्रदान कर सकते हैं, इसलिए आपको केवल e.getMessage()

+0

अच्छा अभ्यास, वही –

+0

मैंने यह किया है: 'MyLoader AsyncTaskLoader >' का विस्तार करता है 'आप' बंडल 'का भी उपयोग कर सकते हैं और त्रुटियों के लिए एक कुंजी हो सकती है, यदि आपका सभी डेटा' पार्सेलबल 'लागू करता है । –

+0

प्रासंगिक पढ़ा गया: http://tech.puredanger.com/2010/03/31/do-we-want-a-java-util-pair/ – for3st

1

मैंने आपके द्वारा सुझाए गए अनुसार एक मिश्रित ऑब्जेक्ट लौटने पर अच्छा परिणाम देखा है जिसमें पेलोड (यदि कोई है) और एक स्टेटस कोड है। तब Fragment कि AsyncTaskLoader को होस्ट करने के लिए एक उपयुक्त और सूचनात्मक त्रुटि प्रदर्शित कर सकते हैं। इस दृष्टिकोण में अतिरिक्त लाभ है कि यह अंतर्निर्मित लोडर जीवन चक्र का उपयोग करता है।

एक अन्य विकल्प एक श्रोता है कि आपके AsyncTaskLoader जब त्रुटियां होती हैं सूचित करेंगे रजिस्टर करने के लिए है। Facebook SDK में लोडर के साथ त्रुटि श्रोताओं का उपयोग करने का एक उदाहरण है।

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