Http Post на Android: запрос и ответ сервера - PullRequest
0 голосов
/ 22 июня 2011

Я пытаюсь отправить информацию на сервер с телефона Android.

Когда сервер получает информацию, он отправляет обратно 1 или 0 для обозначения прохождения или сбоя. На стороне сервера все хорошо, потому что есть другое приложение для iOS, которое делает то же самое, но работает. Также сервер отправляет электронное письмо каждый раз, когда получает запрос.

Моя проблема в том, что не похоже, что приложение связывается с сервером. Когда я запускаю приложение, ответ не возвращается, и электронное письмо не отправляется после выполнения кода Http Post.

У меня есть Http Post code ниже, спасибо за любую помощь, которую вы можете оказать.

    public void send()
        {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(site);

            try {
                 // Add your data
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                nameValuePairs.add(new BasicNameValuePair("dateOfEventStart", startYear + "-" + startMonth + "-" + startDay));
                nameValuePairs.add(new BasicNameValuePair("dateOfEventEnd", endYear + "-" + endMonth + "-" + endDay));
                nameValuePairs.add(new BasicNameValuePair("locationType", locType));
                nameValuePairs.add(new BasicNameValuePair("locationZipCode", location));
                nameValuePairs.add(new BasicNameValuePair("eventType", type));
                nameValuePairs.add(new BasicNameValuePair("groundSurface", groundType));
                nameValuePairs.add(new BasicNameValuePair("numberOfGuests", numGuests + ""));
                nameValuePairs.add(new BasicNameValuePair("seatingArrangments", arrangement));
                nameValuePairs.add(new BasicNameValuePair("accessoriesTables",stuff));
                nameValuePairs.add(new BasicNameValuePair("estimatedArea", tent));
                nameValuePairs.add(new BasicNameValuePair("estimatedRoomToSpare", spared));
                nameValuePairs.add(new BasicNameValuePair("contactName", nameA));
                nameValuePairs.add(new BasicNameValuePair("contactPhone", phoneA));
                nameValuePairs.add(new BasicNameValuePair("contactEmail", addressA));
                nameValuePairs.add(new BasicNameValuePair("contactComments", comment));
                nameValuePairs.add(new BasicNameValuePair("isInternational", isInternational + ""));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                // Execute HTTP Post Request
                HttpResponse response = httpclient.execute(httppost);
                responseString = response.toString();


            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
            } catch (IOException e) {
                // TODO Auto-generated catch block
            }

        }

site - это переменная, которая была объявлена ​​ранее. Это строка, которая содержит местоположение получателя формы

также ниже представлена ​​информация о сервере

Вы отправите ему запрос «POST» с (скорее всего) «типом контента» «application / x-www-form-urlencoded».

Содержимое «POST» будет представлять собой строку, отформатированную как URL-адрес веб-сайта «Query> String». (Это вопрос после знака вопроса, если вы с ним не знакомы.)

В этой строке есть ключи и значения, связанные знаком равенства. Пары ключ / значение> разделены амперсандами (& 's).

Вот пример строки, которую я использовал в ASP для проверки службы, если она помогает (с добавлением> возврата каретки для удобства чтения):

strContent = "dateOfEventStart = 2011-09-24

& dateOfEventEnd = 2011-09-26

& locationType = "& Server.URLEncode (" Residential ") &"

& locationZipCode = 38016

& eventType = "& Server.URLEncode (" Корпоративное событие ") &"

& eventTypeSecondary =

& groundSurface = "& Server.URLEncode (" Гравий (из-за грязи) ") &"

& groundSurfaceSecondary =

* * & Одна тысяча тридцать восемь numberOfGuests = 90

& seatArrangements = "& Server.URLEncode (" Круглые столы из 6 гостей ") &"

& accessoriesTables = "& Server.URLEncode (" Шведский стол, торт, подарок, станция для напитков ") &"

& accessoriesEntertainment =

&timateArea = "& Server.URLEncode (" 1200 кв. Футов ") &"

&timateTentSize = "& Server.URLEncode (" 30 футов x 40 футов или 20 футов x 60 футов ") &"

&timateRoomToSpare = "& Server.URLEncode (" 0 кв. Футов или 0 кв. Футов ") &"

& contactName = "& Server.URLEncode (" Джонатан Чан ") &"

& contactPhone = 9011234567

& contactEmail = "& Server.URLEncode (" jchan@lunaweb.com ") &"

& contactComments = "& Server.URLEncode (" Это длинный комментарий. ")

В моем примере ASP вы, возможно, заметили «Server.URLEncode», окружающий строки. Это значит, что определенные символы, которые могут испортить данные, будут закодированы в% шестнадцатеричные значения ASCII. Например, если кто-то введет «Я люблю сыр и пирожное» в качестве комментария, программа> будет считать, что амперсанд обозначает новую пару «ключ / значение». Если мы закодируем URL-адрес, он> будет выглядеть как «I% 20love% 20cheese% 20% 26% 20cake».

Ответы [ 2 ]

2 голосов
/ 22 июня 2011
  1. Посмотрите, какие ошибки есть в файле logcat
  2. Проверьте, включили ли вы разрешение Интернет в файл манифеста.
0 голосов
/ 22 июня 2011

никогда не делайте этого

} catch (ClientProtocolException e) {
     // TODO Auto-generated catch block
} catch (IOException e) {
     // TODO Auto-generated catch block
}

Посмотрите здесь, чтобы увидеть, как это сделать правильно: http://source.android.com/source/code-style.html

...