2015-11-19 13 views
22

का उपयोग करते समय त्रुटि होने पर मुझे प्रतिक्रिया निकाय कैसे मिलता है मैं एपीआई कॉल करने के लिए रेट्रोफिट 2.0 का उपयोग कर रहा हूं जो ऑब्जर्वेबल्स लौटाता है। कॉल ठीक होने के बाद यह सब अच्छा काम करता है और प्रतिक्रिया की अपेक्षा की जाती है। अब मान लें कि हमें एक त्रुटि प्रतिक्रिया है, यह एक त्रुटि पर फेंकता है। जब भी कोई त्रुटि होती है तब भी मैं प्रतिक्रिया शरीर को पढ़ना चाहूंगा।रेट्रोफिट 2.0 ऑब्जर्वेबल

उदाहरण

@FormUrlEncoded 
@POST("tokenLogin") 
Observable<LoginResponse> loginWithToken(
     @Field("token") String pin 
); 

अनुरोध और प्रतिक्रिया मान्य कर रहे हैं, मैं सही नमूदार हो और onError अपेक्षा के अनुरूप जब वहाँ एक त्रुटि है बुलाया जा रहा है।

सही जवाब:

{ "status" : "authenticated" } 

सही नमूदार में प्रत्यक्ष धर्मान्तरित इस और मैं LoginResponse वस्तु के रूप में प्रतिक्रिया पढ़ सकते हैं।

अब, त्रुटि प्रतिक्रिया इस प्रकार है:

{ "errorMessage" : "You need to take some xyz action" } 

मुझे लगता है कि त्रुटि प्रतिसाद पढ़ सकते हैं और उपयोगकर्ता के लिए संदेश प्रदर्शित करना चाहते हैं। मैं इसे कैसे करूं?

उत्तर

36

बस की जाँच करता है, तो फेंकने योग्य HttpException का एक उदाहरण है और फिर आप पुराना वापस प्रतिक्रिया

if (e instanceof HttpException) { 
    ResponseBody body = ((HttpException) e).response().errorBody(); 
    ... 
} 

तो आप उपयोग कर सकते converter to deserialize it (या इसे स्वयं करते हैं) का उपयोग कर सकते हैं।

9

आप त्रुटि संदेश प्रदर्शित करने के लिए इस कोड ब्लॉक को जोड़ सकते हैं।

@Override 
public void onFailure(Throwable t) { 

if (t instanceof HttpException) { 
     ResponseBody body = ((HttpException) t).response().errorBody(); 
     Gson gson = new Gson(); 
     TypeAdapter<ErrorParser> adapter = gson.getAdapter 
       (ErrorParser 
         .class); 
     try { 
      ErrorParser errorParser = 
        adapter.fromJson(body.string()); 

      Logger.i(TAG, "Error:" + errorParser.getError()); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
संबंधित मुद्दे