#android
#Android
Вопрос:
Я использую apache httpclient, который поставляется с Android sdk, для загрузки файла на сервер с использованием составного http-сообщения. Проблема в том, что когда я отключаю Wi-Fi-соединение на своем устройстве, и у устройства нет доступа в Интернет и события после установки sotimeout и connectiontimeout, код зависает в httpclient.execute()
инструкции на неопределенный срок, и это происходит каждый раз.
мой код:
HttpClient httpclient = new DefaultHttpClient();
HttpConnectionParams.setSoTimeout(httpclient.getParams(), 5000);
ConnManagerParams.setTimeout( httpclient.getParams(), 5000 );
HttpConnectionParams.setSocketBufferSize(httpclient.getParams(), 8192);
HttpPost("http://myurl");
File file = new File(fileAbsolutePath);
MultipartEntity mpEntity = new MultipartEntity();
ContentBody cbFile = new FileBody(file);
mpEntity.addPart("uploadedfile", cbFile);
httppost.setEntity(mpEntity);
if(!backupCancel)
{
System.out.println("<<<<<<<<<<<<<<<<<<<<<<Actually transferring file>>>>>>>>>>>>>>>");
HttpResponse response = httpclient.execute(httppost);
}
Ответ №1:
Попробуйте это:
Предполагая, что у вас есть объект HttpClient, который является экземпляром AndroidHttpClient или DefaultHttpClient
HttpParams httpParams = httpClient.getParams();
httpParams.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, Timeout in milli seconds);
Полученный вами HttpParams является ссылочным объектом, поэтому его выполнение setIntParameter устранит проблему
Если у вас действительно нет особых требований к пользовательским таймаутам, предпочитайте использовать AndroidHttpClient, это очень полезно и решает большинство наших проблем 🙂 удачи
Ответ №2:
Я думаю, вам следует использовать
HttpParams lHttpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(lHttpParams, 3000);
HttpConnectionParams.setSoTimeout(lHttpParams, 3000);
С наилучшими пожеланиями,
~ Anup
Комментарии:
1. вы когда-нибудь пробовали это … я перепробовал все возможные комбинации, кажется, ничто не устанавливает sotimeout должным образом. Он никогда не запускается, когда устройство не подключено к Интернету. 🙁
2. да, то, что вы указали, работает просто отлично … на самом деле устройство, которое я проверял, было взломанным, на котором был принудительно установлен 2.2… может быть, из-за того, что, когда я проверял на других устройствах, это сработало как шарм .. спасибо