2011-08-11 20 views
8

मैं इस तरह एक कोड है:एंड्रॉयड हो रही प्रतिक्रिया

HttpClient httpClient = new DefaultHttpClient(); 
HttpPost httpPost = new HttpPost(server); 

try { 
    JSONObject params = new JSONObject(); 
    params.put("email", email); 

    StringEntity entity = new StringEntity(params.toString(), "UTF-8"); 
    httpPost.setHeader("Content-Type", "application/json;charset=UTF-8"); 
    httpPost.setEntity(entity); 

    ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
    String responseBody = httpClient.execute(httpPost, responseHandler); 
    JSONObject response = new JSONObject(responseBody); 
     fetchUserData(response); 

    saveUserInfo(); 

    return true; 
} catch (ClientProtocolException e) { 
    Log.d("Client protocol exception", e.toString()); 
    return false; 
} catch (IOException e) { 
    Log.d`enter code here`("IOEXception", e.toString()); 
    return false; 
} catch (JSONException e) { 
    Log.d("JSON exception", e.toString()); 
    return false; 
} 

और मैं भी अगर मैं HTTP 403 त्रुटि संदेश

उत्तर

12

BasicResponseHandler सफलता कोड (2xx) वापस लौटाया गया तो केवल आपके डेटा को लौटाता है। हालांकि, आप के रूप में प्रतिक्रिया के शरीर को हमेशा वापस करने के लिए अपना खुद का ResponseHandler लिख सकते हैं, उदा।

ResponseHandler<String> responseHandler = new ResponseHandler<String>() { 
    @Override 
    public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException { 
     return EntityUtils.toString(response.getEntity()); 
    } 
    }; 

वैकल्पिक रूप से, आप HttpClient पर other overloaded execute method उपयोग कर सकते हैं जो एक ResponseHandler की आवश्यकता नहीं है और आप HttpResponse रिटर्न सीधे। फिर उसी तरह EntityUtils.toString(response.getEntity()) पर कॉल करें।

प्रतिक्रिया का स्टेटस कोड प्राप्त करने के लिए, आप HttpResponse.getStatusLine().getStatusCode() का उपयोग कर सकते हैं और HttpStatus कक्षा में स्थिर इनट्स में से किसी एक की तुलना कर सकते हैं। जैसे कोड '403' HttpStatus.SC_FORBIDDEN है। आप लौटाए गए स्टेटस कोड के आधार पर अपने आवेदन के लिए प्रासंगिक कार्यों को प्रासंगिक रूप से ले सकते हैं।

+0

आपके उत्तर के लिए बहुत बहुत धन्यवाद! – skayred

2

पाने के लिए प्रलेखन के अनुसार निषिद्ध है एक प्रतिक्रिया करना चाहते हैं BasicResponseHandler के लिए:

तो प्रतिक्रिया असफल रहा है (> = 300 स्थिति कोड), एक HttpResponseException फेंकता है।

आप अपवाद (नोट: आप पहले से ही इस अपवाद ClientProtocolException की महाप्रकार पकड़ने कर रहे हैं) के इस प्रकार पकड़ सकते थे और आप पर कोई त्रुटि स्थिति का सामना कुछ प्रतिक्रिया बनाने/बचाने के लिए है कि कैच ब्लॉक में कुछ कस्टम तर्क डाल सकता है , जैसे कि 403.