Обновление: Найденный ответом самостоятельно, посмотрите ниже :-)Привет,
I'am, в настоящее время кодирующий приложение для Android, которое отправляет материал в фоновом режиме с помощью Сообщения HTTP и AsyncTask. Я использую org.apache.http.client Пакет для этого. Я основывал свой код этого примера.
В основном мой код похож на это:
public void postData() { // Create a new HttpClient and Post Header HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://192.168.1.137:8880/form"); try { List
nameValuePairs = new ArrayList (2); nameValuePairs.add(new BasicNameValuePair("id", "12345")); nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!")); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); // Execute HTTP Post Request HttpResponse response = httpclient.execute(httppost); } catch (ClientProtocolException e) { Log.e(TAG,e.toString()); } catch (IOException e) { Log.e(TAG,e.toString()); } } Проблема состоит в том что httpclient.execute (..) строка берет приблизительно 1,5 к 3 секундам, и я не понимаю почему. Просто запрос страницы с HTTP Добирается, берет приблизительно приблизительно 80 мс, таким образом, проблема, кажется, не сама сетевая задержка.
Проблема, кажется, не находится на стороне сервера также, я также попытался ОТПРАВИТЬ данные на http://www.disney.com/ со столь же медленными результатами. И Firebug показывает время отклика на 1 мс при РЕГИСТРАЦИИ данных на мой сервер локально.
Это происходит на Эмуляторе и с моим Nexus One (оба с Android 2.2).
Если Вы хотите посмотреть на полный код, я поместил его на GitHub.
Это - просто фиктивная программа, чтобы сделать Сообщение HTTP в фоновом режиме с помощью AsyncTask на нажатии кнопки. Это - мое первое приложение для Android и мой первый код Java в течение долгого времени. И incidentially, также мой первый вопрос на Stackoverflow ;-)
Какие-либо идеи, почему httpclient.execute (httppost) занимает много времени?
Хорошо, я решил это сам, проведя дополнительное расследование. Все, что мне нужно было сделать, это добавить параметр, который устанавливает версию HTTP в 1.1, как показано ниже:
HttpParams params = new BasicHttpParams();
params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpClient httpclient = new DefaultHttpClient(params);
Я нашел это благодаря очень красивому HttpHelper Class от and-bookworm и некоторым пробным и- ошибка.
Если я правильно помню, HTTP 1.0 открывает новое TCP-соединение для каждого запроса. Объясняет ли это большую задержку?
Запрос HTTP POST теперь занимает от 50 до 150 мс по WLAN и от 300 до 500 мс по 3G.