Android HttpClient出现org.apache.http.conn.ConnectTimeoutException,导致下载不成功如何解决

发布于 2021-11-25 13:03:25 字数 11403 浏览 1034 评论 8

在Android 4.0环境下,应用使用HttpClient向服务请求xml数据或者请求图片下载,出现下列异常(请求xml数据部分代码没有给出)

W/System.err( 2770): org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:353)
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:238)
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:177)
W/System.err( 2770):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:326)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
W/System.err( 2770):    at com.ipanel.market.request.DownLoadToolUtil.downFile(DownLoadToolUtil.java:108)
W/System.err( 2770):    at com.ipanel.market.request.DownLoadToolUtil.run(DownLoadToolUtil.java:64)
W/System.err( 2770):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
W/System.err( 2770):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
W/System.err( 2770):    at java.lang.Thread.run(Thread.java:856)
I/CategoryActivity( 2770): action:IMG_DOWNLOAD_COMPLETE
D/DetailActivity( 2770): ####zhoulc has getMessage,action:IMG_DOWNLOAD_COMPLETE
W/System.err( 2770): org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:353)
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:238)
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:177)
W/System.err( 2770):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:326)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
W/System.err( 2770):    at com.ipanel.market.request.DownLoadToolUtil.downFile(DownLoadToolUtil.java:108)
W/System.err( 2770):    at com.ipanel.market.request.DownLoadToolUtil.run(DownLoadToolUtil.java:64)
W/System.err( 2770):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
W/System.err( 2770):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
W/System.err( 2770):    at java.lang.Thread.run(Thread.java:856)
W/System.err( 2770): org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:353)
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:238)
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:177)
W/System.err( 2770):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:326)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
W/System.err( 2770):    at com.ipanel.market.request.DownLoadToolUtil.downFile(DownLoadToolUtil.java:108)
W/System.err( 2770):    at com.ipanel.market.request.DownLoadToolUtil.run(DownLoadToolUtil.java:64)
W/System.err( 2770):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
W/System.err( 2770):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
W/System.err( 2770):    at java.lang.Thread.run(Thread.java:856)
D/skia    ( 2770): --- decoder->decode returned false
W/System.err( 2770): org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:353)
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:238)
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:177)
W/System.err( 2770):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:326)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
W/System.err( 2770):    at com.ipanel.market.request.DownLoadToolUtil.downFile(DownLoadToolUtil.java:108)
W/System.err( 2770):    at com.ipanel.market.request.DownLoadToolUtil.run(DownLoadToolUtil.java:64)
W/System.err( 2770):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
W/System.err( 2770):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
W/System.err( 2770):    at java.lang.Thread.run(Thread.java:856)
W/System.err( 2770): org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:353)
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:238)
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:177)
W/System.err( 2770):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:326)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
W/System.err( 2770):    at com.ipanel.market.request.DownLoadToolUtil.downFile(DownLoadToolUtil.java:108)
W/System.err( 2770):    at com.ipanel.market.request.DownLoadToolUtil.run(DownLoadToolUtil.java:64)
W/System.err( 2770):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
W/System.err( 2770):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
W/System.err( 2770):    at java.lang.Thread.run(Thread.java:856)
W/System.err( 2770): org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:353)
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:238)
W/System.err( 2770):    at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:177)
W/System.err( 2770):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:326)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
W/System.err( 2770):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
W/System.err( 2770):    at com.ipanel.market.request.DownLoadToolUtil.downFile(DownLoadToolUtil.java:108)
W/System.err( 2770):    at com.ipanel.market.request.DownLoadToolUtil.run(DownLoadToolUtil.java:64)
W/System.err( 2770):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
W/System.err( 2770):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
W/System.err( 2770):    at java.lang.Thread.run(Thread.java:856)

具体下载部分代码如下:

public int downFile(String fileName, String url, long curfilelength) {
		InputStream input = null;
		RandomAccessFile file = null;
		int readSize = -1;
		byte[] buffer = new byte[8024];
		Log.d(TAG, "downFile url = " + url);
		Log.d(TAG, "downFile fileName = " + url);
		Log.d(TAG, "downFile curfilelength = " + curfilelength);
		try {
			if (curfilelength != 0) {
				url = FilePath.GET_INTERRUPT_APK + "?url=" + url + "&fileSize="
						+ curfilelength;
				Log.d(TAG, "after change" + url);
			}
			HttpGet request = new HttpGet();
//			request.addHeader("Range", "bytes=" + curfilelength + "-");
			request.setURI(new URI(url));
			HttpResponse response = client.execute(request);
			file = new RandomAccessFile(fileName, "rw");
			file.seek(curfilelength);
			input = response.getEntity().getContent();
			while ((readSize = input.read(buffer)) != -1) {
				file.write(buffer, 0, readSize);
			}
			return DownLoadCallBack.DOWNLOAD_SUCCESS;
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return DownLoadCallBack.DOWNLOAD_FAILD;
		} finally {
			if (input != null) {
				try {
					input.close();
					input = null;
				} catch (Exception e2) {
					// TODO: handle exception
				}
			}
			if (file != null) {
				try {
					file.close();
					file = null;
				} catch (Exception e2) {
					// TODO: handle exception
				}
			}
		}

	}

HttpClient也设置了超时情况:

//设置连接管理器的超时
			ConnManagerParams.setTimeout(params, 1000);
			//设置连接超时
			HttpConnectionParams.setConnectionTimeout(params, 5000);
			//设置socket超时
			HttpConnectionParams.setSoTimeout(params, 10000);

请问,这个异常是一定会抛的吗,导致图片没有下载成功,我需要在处理异常的时候再次进行下载,还是代码哪有缺陷,需要改正。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

路还长,别太狂 2021-11-30 13:37:11

把连接超时的时间调大些.比如设置成60000毫秒.

噩梦成真你也成魔 2021-11-30 13:26:48

回复
我不知道你怎么想的,要是有上万链接,岂不是很不效率了?

做个少女永远怀春 2021-11-30 13:08:02

请问这个问题,您怎么解决的?我今天也遇到了。一开始访问是ok的,偶尔会出现这个异常。。。

居里长安 2021-11-30 12:33:59

问题解决了,在做耗时较长的http请求交互的时候,重新new一个httpClient对象,而不是用一个单例的httpclient对象进行管理,所有的http请求。

长安忆 2021-11-30 10:14:35

ConnManagerParams.setTimeout这个是连接最大等待时间,HttpConnectionParams.setConnectionTimeout这个是最大连接超时时间,HttpConnectionParams.setSoTimeout这个是读取超时时间,根据org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection,可以知道是在ConnManagerParams.setTimeout(params, 1000);这句抛出的,把1000改成10000吧。

绝影如岚 2021-11-29 16:55:31

sorry,多测试几次之后,还是出现了这个问题。

野心澎湃 2021-11-29 16:27:19

ConnManagerParams.setTimeout这个是连接最大等待时间,HttpConnectionParams.setConnectionTimeout这个是最大连接超时时间,HttpConnectionParams.setSoTimeout这个是读取超时时间,根据org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection,可以知道是在ConnManagerParams.setTimeout(params, 1000);这句抛出的,把1000改成10000吧。

冷清清 2021-11-29 12:37:38

引用来自“zhoulc”的答案

问题解决了,在做耗时较长的http请求交互的时候,重新new一个httpClient对象,而不是用一个单例的httpclient对象进行管理,所有的http请求。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文