我试图在andoid中调用rest web服务,但我总是有一个超时异常。 代码是:
HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet("http://XXXX:8080/YYY/zzzz?username=0001epd&password=1111");
ResponseHandler<String> handler = new BasicResponseHandler();
try {
String result = httpclient.execute(request, handler);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
httpclient.getConnectionManager().shutdown();
你知道错误在哪里吗?
在清单中我添加了android.permission.INTERNET
答案 0 :(得分:1)
也许您的移动设备或工作站的互联网连接速度慢或远程服务需要一些时间。您可以使用Internet浏览器测试它以请求REST URL。
至少你可以尝试增加代码中的超时时间:
final int timeout = 10000; //ms
HttpConnectionParams.setConnectionTimeout(httpParams, timeout);
HttpConnectionParams.setSoTimeout(httpParams, timeout);
final HttpClient httpclient = new DefaultHttpClient(httpParams);
答案 1 :(得分:1)
我怀疑这是你可以通过提高限制来解决的那种超时,因为Impression建议,这听起来更像是你的设置到达服务器的网络问题。
这是来自模拟器还是真实设备?确保您可以实际到达服务器(例如,查看浏览器中输入XXXX:8080
的内容);如果您在模拟器上尝试连接到本地计算机,则需要使用10.0.2.2
作为IP地址(不是127.0.0.1或LAN上的IP)。如果您使用的是物理设备,则通常的客户端 - 服务器网络检查规则适用:
答案 2 :(得分:1)
如果你在模拟器上运行它,你是否尝试将上面的url放在模拟器浏览器上,看看你是否得到了结果。如果您可以在浏览器中看到结果并且您在代理后面,请尝试在代码中添加以下行
HttpParams my_httpParams = new BasicHttpParams();
final String proxyHost = android.net.Proxy.getDefaultHost();
final int proxyPort = android.net.Proxy.getDefaultPort();
if(proxyPort != -1)
{
my_httpParams.setParameter(ConnRoutePNames.DEFAULT_PROXY, new HttpHost(proxyHost, proxyPort));
}
在DefaultHttpClient中传递HttpParams