我工作的一个Android应用程序需要为了从Android设备上的文件上传到Web服务器使用的HttpClient。我上传的文件最大可达1 Gb,因此如果设备在上传过程中失去连接,则可能会发生超时。奇怪的是,我为套接字设置的超时时间似乎没有任何影响。只要我失去连接而不是引发SocketTimeoutException,应用程序就会挂起。的Apache的HttpClient 4.0未能超时套接字在Android
我试着使用:
HttpConnectionParams.setConnectionTimeout(params, CrashLogParams.TIMEOUT);
HttpConnectionParams.setSoTimeout(params, CrashLogParams.TIMEOUT);
但这只是工作的连接超时,而不是套接字超时。我也试过:
HttpParams p = httpclient.getParams();
p.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);
p.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);
我知道,连接超时工作的原因是因为,我会执行
httpclient.execute(httppost);
的应用似乎当连接上载过程中丢失挂起后获得连接超时异常,但在应用程序成功连接到服务器之后。
为了测试我的应用程序,我禁用了网络在不同的时间来查看应用程序会如何反应。如果我在发送请求之前禁用网络,则会出现连接错误,并且我的应用程序可以正常处理该错误,但如果在上载期间禁用它,应用程序将挂起。当然,我通过AsyncTasks完成所有这些请求,所以主UI线程不会崩溃。我只是想知道是否有其他方式来确保套接字在没有收到任何数据时会超时,或者如果我在这里丢失任何东西。我读过很多博客和文章,但大多数人只是建议使用SO_TIMEOUT,这对我不起作用。
sotimeout not working in a multipart http post on android 2.1
先后您的应用更小尺寸文件的工作? – momo
我试过1 MB文件,错误仍然存在。我想用更小的文件,你将有更大的可能性断开文件上传之间的时间,但除此之外。我希望能够在发生网络故障时使我的应用程序健壮。 –
我有这个相同的确切问题,除了我的上传大小相当小,几kb的顺序。似乎需要触发该错误的所有东西都是在我检查它是否启动之后但在我调用execute()之前,网络关闭。 – Michael