2011-08-11 18 views
8

私はこのようなコードを持っている:Androidの取得応答が

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)が返された場合にのみデータを返します。ただし、返信の本文をいつもStringとして返すように、自分でResponseHandlerを簡単に書くことができます。また

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

、あなたはResponseHandlerを必要とし、直接あなたにHttpResponseを返していないHttpClientother overloaded execute methodを使用することができます。同じ方法でEntityUtils.toString(response.getEntity())に電話してください。

レスポンスのステータスコードを取得するには、HttpResponse.getStatusLine().getStatusCode()を使用し、HttpStatusクラスのスタティックintのいずれかと比較することができます。例えば。コード「403」はHttpStatus.SC_FORBIDDENです。返されるステータスコードに応じて、アプリケーションに関連する特定のアクションを実行できます。

+0

ありがとうございました。 – skayred

2

を取得することは禁じられていても応答を持つようにしたいですBasicResponseHandlerため:

応答が不成功であった場合(> = 300ステータスコード)、HttpResponseExceptionスロー。

あなたはこのタイプの例外をキャッチすることができ(注:あなたはすでにこの例外ClientProtocolExceptionのスーパータイプをキャッチされている)と、あなたは、エラー状況が発生した際に、いくつかの応答を保存/作成するために、そのcatchブロックにいくつかのカスタム・ロジックを入れることができますたとえば、403.

関連する問題