Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:AndroidHttpClient-如何设置超时?_Java_Android_Http_Networking_Timeout - Fatal编程技术网

Java Android:AndroidHttpClient-如何设置超时?

Java Android:AndroidHttpClient-如何设置超时?,java,android,http,networking,timeout,Java,Android,Http,Networking,Timeout,我已按照的说明操作,但超时设置似乎不起作用 try { int timeout = 3000; URL myURL = //some valid URL AndroidHttpClient = AndroidHttpClient.newInstance("name"); HttpGet httpGet = new HttpGet(myURL.toExternalForm()); HttpParams httpParams = new BasicHttp

我已按照的说明操作,但超时设置似乎不起作用

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();
}
//...
但是,超时值不会改变任何内容

在我链接的答案中,它还说:

连接超时抛出“java.net.SocketTimeoutException:套接字未连接”,套接字超时抛出“java.net.SocketTimeoutException:操作超时”

但我两个都没有。相反,我得到了“org.apache.http.conn.ConnectTimeoutException:Connect to…timeout”


有人能帮我吗?错误在哪里?

如果不使用
httpParams
params,则必须将其提供给HTTPClient。所以它不会像这样工作。在您链接的答案中,顺序是正确的!尝试以下顺序:首先创建参数并将其提供给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);
我没有将参数附加到http请求,但在我的示例中,正确的方法是

httpGet.setParams(httpParams);
在调用httpClient.execute(httpGet)之前


刚刚添加了那一行,效果很好。

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

AndroidHttpClient client = AndroidHttpClient.newInstance("Client V/1.0");
HttpConnectionParams.setConnectionTimeout(this.client.getParams(), 3000);
HttpConnectionParams.setSoTimeout(this.client.getParams(), 5000);
这将导致设置这些特定参数


HTH

在阅读之后,下面是我如何直接从默认客户机使用参数进行操作的:

HttpClient client = new DefaultHttpClient();
HttpParams params = client.getParams();
HttpConnectionParams.setConnectionTimeout(params, 3000);
HttpConnectionParams.setSoTimeout(params, 3000);

最初的功劳是

多亏了你的回答,我才意识到我忘记插入httpClient.setParams(httpParameters);,这是kuester2000提出的。但是,它不适用于AndroidHttpClient。是否可以像您这样使用AndroidHttpClient而不是HttpClient?您真的需要AndroidHttpClient的功能吗?否则,您可以简单地使用DefaultHTTPClient。实际上,我不知道两者之间的区别。。。这可能意味着“不”,不是吗?是的,也许,看到这个答案:我确实做到了这一点,但“合理的默认设置”对我并没有真正的帮助。^然而,它在“newInstance”方法的文档中说:“创建一个具有合理默认值的新HttpClient(可以更新)。”但我找不到更新它们的方法。我喜欢这样。这里有一个更详细的解释:
HttpClient client = new DefaultHttpClient();
HttpParams params = client.getParams();
HttpConnectionParams.setConnectionTimeout(params, 3000);
HttpConnectionParams.setSoTimeout(params, 3000);