2015-05-18 15 views
19

द्वारा सिंक्रोनस कॉल में त्रुटि करने में त्रुटि मैं रेट्रोफिट सिंक्रोनस कॉल में त्रुटि प्रबंधन करने का सही तरीका जानने का प्रयास कर रहा हूं। मैं एसिंक्रोनस कॉल के लिए जानता हूं, रेट्रोफिट में विफलता मामले के लिए कॉलबैक है। लेकिन सिंक्रोनस कॉल के लिए मुझे त्रुटि कैसे संभालना चाहिए? मेरा अनुमान एक कोशिश ब्लॉक के साथ कॉल लपेट रहा है और पकड़ ब्लॉक में RetrofitError अपवाद संभाल।रेट्रोफिट

+1

तुम क्यों रेट्रोफिट में तुल्यकालिक कॉल उपयोग करना चाहते हैं: आप सीधे निष्पादित()

/** * Synchronously send the request and return its response. * * @throws IOException if a problem occurred talking to the server. * @throws RuntimeException (and subclasses) if an unexpected error occurs creating the request * or decoding the response. */ Response<T> execute() throws IOException; 

अन्य संदर्भ के कार्यान्वयन पर एक नज़र हो सकता है? एचटीपी अनुरोध एंड्रॉइड में असीमित रूप से भेजा जाना चाहिए। –

+17

@ piotr.wittchen कभी-कभी आप पहले से ही थ्रेड में हैं, फिर यह एक सिंक्रोनस कॉल –

+0

का उपयोग करने के लिए पूरी तरह से अच्छी समझ में आता है, बस मुझे लगता है कि मुझे इसकी आवश्यकता है जब आप 401 प्राप्त करने के बाद पृष्ठभूमि में टोकन रीफ्रेश करने का प्रयास कर रहे हों सेवर –

उत्तर

6

आपका अनुमान सही लगता है, तुल्यकालिक कॉल रेट्रोफिट का उपयोग कर एक RetrofitError त्रुटि का प्रतिनिधित्व फेंकने के लिए किया जाता है: Reference। ध्यान दें कि handleError में सिंक्रोनस कॉल के मामले में नहीं होना चाहिए।

संपादित करें: ऐसा प्रतीत होता है रेट्रोफिट धीरे-धीरे, 2.0 रिलीज करने के लिए पर आगे बढ़ रहा है अगर आप रेट्रोफिट 2.0 का उपयोग करने की योजना है, मैं दस्तावेजों पढ़ने की सलाह देते हैं कि यह कैसे नए संस्करण में किया जाता है देखने के लिए।

संपादित करें pt2: रेट्रोफिट 2.0 रिलीज में स्थानांतरित हो गया है और अब यदि आप त्रुटियों को संभालना चाहते हैं तो आपको रेट्रोफिट एरर लेकिन आईओएक्सप्शन को पकड़ना नहीं होगा। 1

4

यह खोजना मुश्किल है। सिंक्रोनस कॉल पर त्रुटि प्रबंधन के बारे में कोई भी वास्तव में बात नहीं करता है। लेकिन मुझे कुछ मिला। मैं पूरी तरह यकीन है कि (यह निश्चित रूप से कस्टम त्रुटियों के लिए जोड़ा जाना चाहिए, लेकिन ऐसा नहीं है) मुझे मिल गया here

Foo doFoo() throws RetroFitError; 

तुल्यकालिक कॉल एक कोशिश के अंदर हो जाना चाहिए अगली पंक्ति में जोड़ा जाना चाहिए अगर नहीं कर रहा हूँ इस तरह पकड़ खंड:

try{ 
    doFoo(); 
}catch(RetroFitError e){ 

} 

मिले here

+0

में नेटवर्क कॉल नहीं करना चाहता हूं हाय केविन, धन्यवाद तुम्हारे जवाब के लिए। स्रोत https://github.com/square/retrofit/blob/master/retrofit/src/main/java/retrofit/RestAdapter.java#L182 और https://github.com/square/retrofit/blob/ पर आधारित स्रोत के आधार पर मास्टर/रेट्रोफिट/src/main/java/retrofit/ErrorHandler.java पहले से ही एक डिफ़ॉल्ट हैंडलर है जो RetrofitError फेंकता है। इसलिए यदि हमें कस्टम त्रुटि को संभालने की आवश्यकता नहीं है, तो हमें विशेष रूप से RetrofitError को फेंकने की आवश्यकता नहीं है। –

+0

@feiqu ओह ठीक है। तो आप इसे छोड़ सकते हैं। प्रयास पकड़ने का तरीका तब आपका त्रुटि हैंडलर होगा;) –