有时必须等待很长时间,直到HttpClient.execute()抛出异常

时间:2013-05-24 07:34:30

标签: java android http connection httpclient

我正在使用HttpClient连接到我的网络服务。我想实现一个简单的检查,如果应用程序可以连接到此Web服务。如果没有,我想要一个特定的消息出现。这就是我尝试实现它的方式:

public static JSONObject getJson(String url) {
    StringBuilder builder = new StringBuilder();
    HttpClient client = new DefaultHttpClient();
    HttpGet get = new HttpGet(url);

    try {
        HttpResponse response = client.execute(get);
        StatusLine statusLine = response.getStatusLine();
        int statusCode = statusLine.getStatusCode();
        if(statusCode == 200) {
            HttpEntity entity = response.getEntity();
            InputStream content = entity.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(content));
            String line;
            while((line = reader.readLine()) != null) {
                builder.append(line);
            }
        }
        String json = builder.toString();
        JSONObject jsonObject = new JSONObject(json);
        return jsonObject;
    } catch (Exception e) {
        showErrorMessage();
    } 

    return null;
}

有效。如果我没有互联网连接,则在尝试呼叫client.execute()时会抛出异常,但问题是有时会立即抛出此异常,有时需要2分钟才会抛出它。

可能是什么原因?我认为它可能与尝试连接一段特定的时间有关,但我没有在应用程序中更改任何内容,而且这个时间总是有所不同。

1 个答案:

答案 0 :(得分:1)

设置timeout参数以更快获得异常:

//以毫秒为单位的值

httpget.getParams().setParameter("http.socket.timeout", new Integer(5000));