sotimeout не работает в составном http-сообщении на Android 2.1

#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… может быть, из-за того, что, когда я проверял на других устройствах, это сработало как шарм .. спасибо