Java 使用tth DefaultHTTPClient时捕获404和500错误

Java 使用tth DefaultHTTPClient时捕获404和500错误,java,android,Java,Android,我正在使用Android中的DefaultHTTPClient获取页面。我想捕获服务器返回的500和404错误,但我得到的只是java.io.IOException。我如何特别地捕捉这两个错误 这是我的密码: public String doGet(String strUrl, List<NameValuePair> lstParams) throws Exception { Integer intTry = 0; while (intTry < 3) {

我正在使用Android中的
DefaultHTTPClient
获取页面。我想捕获服务器返回的500和404错误,但我得到的只是
java.io.IOException
。我如何特别地捕捉这两个错误

这是我的密码:

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;

}
publicstringdoget(stringstrurl,List lstParams)抛出异常{
整数intTry=0;
while(intTry<3){
intTry+=1;
试一试{
字符串strResponse=null;
HttpGet htpGet=新的HttpGet(strUrl);
DefaultHttpClient dhcClient=新的DefaultHttpClient();
dhcClient.addResponseInterceptor(新的MakeCacheable(),0);
HttpResponse resResponse=dhcClient.execute(htpGet);
strResponse=EntityUtils.toString(resResponse.getEntity());
返回strResponse;
}捕获(例外e){
if(intTry<3){
Log.v(“generics.Indexer”,String.format(“尝试#%d”,intTry));
}否则{
投掷e;
}
}
}
返回null;
}
我使用

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

检查响应代码。当一切顺利时,它应该是HTTP/1.1200 OK。您可以轻松创建一个交换机来管理不同的情况。

您需要获得
状态码

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
}

您可以使用状态代码比较,如下所示:

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
}

您可以找到的文档。

+1,我建议您更改代码段上的注释,这实际上意味着您将处理else块上除200个响应之外的所有响应,因为
java.net.HttpURLConnection.HTTP_OK
是一个值为
200的常量(包括3xx、2xx(200除外)和1xx状态类),而不仅仅是错误。
EntityUtils.consumeQuietly(resResponse.getEntity())