Android:AndroidHttpClient - 如何设置超时?

jel*_*ish 7 java networking android timeout http

我已经按照kuester2000的答案的说明,但我的超时设置似乎不起作用.

try
{
    int timeout = 3000;
    URL myURL = //some valid URL

    AndroidHttpClient = AndroidHttpClient.newInstance("name");
    HttpGet httpGet = new HttpGet(myURL.toExternalForm());

    HttpParams httpParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpParams, timeout);
    HttpConnectionParams.setSoTimeout(httpParams, timeout);

    HttpResponse response = httpClient.execute(httpGet);

    //...
}
catch (SocketTimeoutException e)
{
    e.printStackTrace();
}
catch (ConnectTimeoutException e)
{
    e.printStackTrace();
}
catch (IOException e)
{
    e.printStackTrace();
}
//...
Run Code Online (Sandbox Code Playgroud)

但是,超时值不会改变任何内容.

在我联系的答案中,它还说:

连接超时抛出"java.net.SocketTimeoutException:Socket未连接"和套接字超时"java.net.SocketTimeoutException:操作超时".

但我得不到.相反,我得到"org.apache.http.conn.ConnectTimeoutException:连接到...超时"

有人可以帮助我吗?哪里出错了?

the*_*ega 9

您不使用httpParamsparams,它们必须提供给HTTPClient.所以它不会像这样工作.在您链接的anwer中,订单是正确的!请尝试以下顺序:首先创建Params并将它们提供给HTTPClient.

HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 5000);
HttpConnectionParams.setSoTimeout(httpParameters, 10000);

HttpClient client = new DefaultHttpClient(httpParameters);
HttpGet request = new HttpGet(url);

HttpResponse response = client.execute(request);
Run Code Online (Sandbox Code Playgroud)


jel*_*ish 6

确实错过了将params附加到我的http请求中,但在我的示例中执行此操作的正确方法是

httpGet.setParams(httpParams);
Run Code Online (Sandbox Code Playgroud)

在调用httpClient.execute(httpGet)之前.

刚添加该行,它工作正常.


小智 5

在客户端上设置的另一个选项:

AndroidHttpClient client = AndroidHttpClient.newInstance("Client V/1.0");
HttpConnectionParams.setConnectionTimeout(this.client.getParams(), 3000);
HttpConnectionParams.setSoTimeout(this.client.getParams(), 5000);
Run Code Online (Sandbox Code Playgroud)

这应该导致设置那些特定的参数...

HTH