我正在开发一款Android应用,它需要在网页启动时从网页读取一行。我使用以下代码执行此操作:
try{
URL url = new URL("http://www.example.com");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
line = reader.readLine();
}
catch(Exception e){
e.printStackTrace();
}
它工作正常,但有时连接或服务器很慢,应用程序冻结或崩溃。
我想要超时5秒,如果达到超时,我想向用户表示敬酒,说网络正忙,请他稍后再试。
我尝试了HttpURLConnection setConnectTimeout()方法,但它没有用。
有什么线索我能做到这一点吗?谢谢正手。
答案 0 :(得分:3)
如果你将setConnectionTimeout设置为5秒,可能会有更好的解决方案,捕获SocketTimeoutException并从那里显示Toast。当您将ConnectionTimeout设置为某个值并且连接未获得响应代码时将抛出SocketTimeoutException。在这里,您可以捕获它并调用处理程序以在UI中显示吐司。最后将关闭连接并释放内存。
class MyHttpClient extends DefaultHttpClient {
@Override
protected ClientConnectionManager createClientConnectionManager() {
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https",
mSSLSocketFactory != null
? mSSLSocketFactory
: SSLSocketFactory.getSocketFactory(),
443));
return new SingleClientConnManager(getParams(), registry);
}
MyHttpClient httpClient = new MyHttpClient();
// set http params
HttpParams params = httpClient.getParams();
params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, new Integer(30000));
params.setParameter(CoreConnectionPNames.SO_TIMEOUT, new Integer(30000));
httpClient.setParams(params);
....
httpClient.execute(httpUriRequest)
答案 1 :(得分:1)
请考虑使用AndroidHttpClient
类,它具有很好的预设超时,因此您无需执行任何操作。