我工作的一個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