Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Android, отправка строки XML на сервер через HTTP

Автор вопроса: SadОтветов: 2

Недавно я начал заниматься программированием для Android. Я столкнулся с проблемой. В настоящее время я создал запрос строки XML под названием "sendData". Эти sendData необходимо отправить на сервер, чтобы проверить, действительна ли учетная запись пользователя или нет.

В настоящее время, когда я пытаюсь отправить запрос, я связываюсь с сервером, но я получаю общую ошибку ответа по умолчанию, что заставляет меня поверить, что XML отправляется неправильно.

public void postData(String sendData) {
        // Create a new HttpClient and Post Header
        System.out.println("SENDDATA" + sendData);
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://www......");

        try {
            // Add your data
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(0);
            nameValuePairs.add(new BasicNameValuePair(sendData, sendData));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

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

            inputStreamToString(response.getEntity().getContent());

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

Выше приведен код, который я использую для отправки данных. Я считаю, что проблема, возможно, происходит в разделе "попробовать". Я искал похожие проблемы на этом форуме и не нашел ответа, который искал.

Любая помощь будет оценена.

Спасибо,

РЕДАКТИРОВАТЬ:

В журнале кот. Когда я распечатываю строку, она выглядит так.

07-19 15:35:36.642: INFO/System.out(2204): <Request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="1.0" xsi:noNamespaceSchemaLocation="http://www.example.com">
07-19 15:35:36.642: INFO/System.out(2204): <Identification>
07-19 15:35:36.642: INFO/System.out(2204): <UserID>[email protected]</UserID>
07-19 15:35:36.642: INFO/System.out(2204): <Password>password</Password>
07-19 15:35:36.642: INFO/System.out(2204): </Identification>
07-19 15:35:36.642: INFO/System.out(2204): <Service>
07-19 15:35:36.652: INFO/System.out(2204): <ServiceName>AccountVerify</ServiceName>
07-19 15:35:36.652: INFO/System.out(2204): <ServiceDetail/>
07-19 15:35:36.652: INFO/System.out(2204): </Service>

07-19 15:35:36.652: ИНФОРМАЦИЯ/System.out(2204):

Каждый элемент имеет свою строку в LogCat. Может ли это быть проблемой?

  • 1.) Опубликуйте полученное сообщение об ошибке. 2.) Поместите что-нибудь в блоки catch - могут быть обнаружены ошибки, попадающие в пустой блок catch и ничего не показывающие, а затем программа продолжает работать в плохом состоянии. Nate 19.07.2011
  • Вы пытались использовать TCPMon для перехвата и проверки данных, поступающих из вашего приложения? anirvan 19.07.2011
  • Я не получаю никаких сообщений об ошибках. Я буду и положить что-нибудь в блоки захвата. Я никогда не использовал TCPMon, но я посмотрю на это. Sad 19.07.2011
  • Я проверил улов. Ничего не перехватывается, поэтому никаких ошибок не возникает. Sad 19.07.2011
  • ты уже разобрался с проблемой? nickfox 20.07.2011
  • Да спасибо. Я написал ответ ниже :) Sad 20.07.2011

httpandroidjavaxmlpost

Ответы

Ответ 1 · рейтинг 2 · Sad

Я добрался до ответа. Проблема заключалась в том, что при дальнейшем просмотре в фактическом запросе не отправлялась никакая информация. Решение состояло в том, чтобы удалить массив и заменить его, установив новый Entity. Измененный/рабочий код ниже:

        try {
            StringEntity se = new StringEntity(sendData);
            httppost.setEntity(se);
            // Execute HTTP Post Request
            HttpResponse response = httpclient.execute(httppost);
            System.out.println("Message Sent!");
            inputStreamToString(response.getEntity().getContent());
            }

Ответ 2 · Moog

Я настоятельно рекомендую вам использовать веб-отладчик Fiddler, чтобы определить, что вы отправляете. Это отличный инструмент, который сэкономит вам много времени.

В опубликованном вами коде есть несколько ошибок.

Создаваемый массив имеет размер 0, было бы более эффективно установить значение 1 (поскольку вы добавляете только один NameValuePair).

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);

Первый параметр конструктора BasicNameValuePair неверен и должен быть каким-то именем ключа.

nameValuePairs.add(new BasicNameValuePair("mySendData", sendData));

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы