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

Недавно я начал заниматься программированием для 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. Может ли это быть проблемой?


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


Ответы (2)


Я добрался до ответа. Проблема заключалась в том, что при дальнейшем просмотре в фактическом запросе не отправлялась никакая информация. Решение состояло в том, чтобы удалить массив и заменить его, установив новый 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());
            } 
person Sad    schedule 20.07.2011

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

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

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

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

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

nameValuePairs.add(new BasicNameValuePair("mySendData", sendData));
person Moog    schedule 19.07.2011
comment
на самом деле ArrayList‹...›(0) в порядке... stackoverflow.com/questions/4666024/ ... но вы правы насчет BasicNameValuePair :) - person Selvin; 19.07.2011