3

DefaultHTTPClientAndroid で を使用してページを取得しています。サーバーから返された 500 および 404 エラーをトラップしたいのですが、java.io.IOException. これら2つのエラーを具体的にトラップするにはどうすればよいですか?

これが私のコードです:

public String doGet(String strUrl, List<NameValuePair> lstParams) throws Exception {

    Integer intTry = 0;

    while (intTry < 3) {

        intTry += 1;

        try {

            String strResponse = null;
            HttpGet htpGet = new HttpGet(strUrl);
            DefaultHttpClient dhcClient = new DefaultHttpClient();
            dhcClient.addResponseInterceptor(new MakeCacheable(), 0);
            HttpResponse resResponse = dhcClient.execute(htpGet);
            strResponse = EntityUtils.toString(resResponse.getEntity());
            return strResponse;

        } catch (Exception e) {

            if (intTry < 3) {
                Log.v("generics.Indexer", String.format("Attempt #%d", intTry));
            } else {                
                throw e;                    
            }

        }

    }

    return null;

}
4

3 に答える 3

7

取得する必要がありますstatusCode

HttpResponse resResponse = dhcClient.execute(htpGet);
StatusLine statusLine = resResponse.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == HttpURLConnection.HTTP_OK) {
    // Here status code is 200 and you can get normal response
} else {
    // Here status code may be equal to 404, 500 or any other error
}
于 2012-09-09T09:13:05.023 に答える
2

次のように、ステータス コードの比較を使用できます。

StatusLine statusLine = resResponse.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode >= 400 && statusCode < 600) {
    // some handling for 4xx and 5xx errors
} else {
    // when not 4xx or 5xx errors
}

ただし、重要なことは、HTTPEntity を消費する必要があることです。そうしないと、接続が接続プールに解放されず、接続プールが枯渇する可能性があります。既にこれを で行っていtoString(entity)ますが、使用されないものを読み取るためにリソースを消費したくない場合は、次の命令でこれを行うことができます。

EntityUtils.consumeQuietly(resResponse.getEntity())

ここで見つけることができるドキュメント。

于 2012-09-09T09:25:14.747 に答える
0

私が使う

if (response.getStatusLine().toString().compareTo(getString(R.string.api_status_ok)) == 0)

応答コードを確認します。すべてがうまくいくと、HTTP/1.1 200 OK になるはずです。さまざまなケースを管理するスイッチを簡単に作成できます。

于 2012-09-09T09:12:37.670 に答える