Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.92
Critically
10 / 10 / 0
Регистрация: 14.03.2011
Сообщений: 373
#1

Post запрос XML - Программирование Android

07.12.2012, 20:04. Просмотров 3171. Ответов 22
Метки нет (Все метки)

Добрый день, подскажите, как сделать post запрос, отправляться должна xml вида:
XML
1
2
3
4
5
<?xml version="1.0" encoding="UTF-8" ?>
<data>
<login>debugger</login>
<password>123456</password>
</data>
В интернете смотрел примеры, они не подходят, а те что я пробовал как пример делать тупо крашат приложение...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 20:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Post запрос XML (Программирование Android):

Post запрос - Программирование Android
Как отправить POST запрос на java?

POST Запрос - Программирование Android
подскажите что здесь не так, ошибка возникает на строке HttpResponse responsePOST = client.execute(post); public...

post запрос - Программирование Android
public String postData() { String str = null; HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost =...

Post запрос - Программирование Android
Как отправить Post запрос и принять ответ сервера ? Exlipce

POST запрос - Программирование Android
Существует активити &quot;Register&quot;, содержащий несколько элементов edittext. Пытаюсь передать текст из них в другой класс &quot;RestClient&quot;, чтобы...

ANDROID и POST запрос - Программирование Android
Если честно я не знал в какой раздел лучше написать так как моя задача затрагивает несколько областей программирования. Если что извините...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
09.12.2012, 21:30 #16
http://www.androidhive.info/2011/11/...sing-tutorial/
Critically
10 / 10 / 0
Регистрация: 14.03.2011
Сообщений: 373
09.12.2012, 23:26  [ТС] #17
XMLParser - создал класс, запихал туда то что требовалось...
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package com.example.test;
 
import java.io.IOException;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
 
import android.sax.Element;
import android.util.Log;
 
public class XMLParser {
    public String getXmlFromUrl(String url) {
        String xml = null;
 
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
 
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            xml = EntityUtils.toString(httpEntity);
 
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // return XML
        return xml;
    }
    
    public Document getDomElement(String xml){
        Document doc = null;
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
 
            DocumentBuilder db = dbf.newDocumentBuilder();
 
            InputSource is = new InputSource();
                is.setCharacterStream(new StringReader(xml));
                doc = db.parse(is); 
 
            } catch (ParserConfigurationException e) {
                Log.e("Error: ", e.getMessage());
                return null;
            } catch (SAXException e) {
                Log.e("Error: ", e.getMessage());
                return null;
            } catch (IOException e) {
                Log.e("Error: ", e.getMessage());
                return null;
            }
                // return DOM
            return doc;
    }
 
    public String getValue(Element item, String str) {
        NodeList n = ((Document) item).getElementsByTagName(str);
        return this.getElementValue(n.item(0));
    }
     
    public final String getElementValue( Node elem ) {
             Node child;
             if( elem != null){
                 if (elem.hasChildNodes()){
                     for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                         if( child.getNodeType() == Node.TEXT_NODE  ){
                             return child.getNodeValue();
                         }
                     }
                 }
             }
             return "";
      } 
}
Далее вызываю все это дело в мейне
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
public void onClickFirst(View v){
    Thread test = new Thread(new Runnable()
    { 
        public void run()
        {  
            String str = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
                         "<data>" +
                         "<login>test</login>" +
                         "<password>test</password>" +
                         "</data>";
       
       HttpClient httpclient = new DefaultHttpClient();
       HttpPost httppost = new HttpPost("http://***********/Service/XMLService.asmx/Balance");
 
       try {
          
           httppost.setEntity(new StringEntity(str));
           final HttpResponse response = httpclient.execute(httppost);
           nameView.post(new Runnable(){
               private Element e;
 
            public void run () {
                   HttpEntity mResEntityGet = response.getEntity();
                    if (mResEntityGet != null) {
                       
                                           String content;
                                           String name = "";
                                           String cost = "";
                                           String description = "";
                                     final String KEY_ITEM = "Data"; // parent node
                                     final String KEY_NAME = "Code";
                                     final String KEY_COST = "Account";
                                     final String KEY_DESC = "Price";
                            try {
                                content = EntityUtils.toString(mResEntityGet);
 
                                 
                                XMLParser parser = new XMLParser();
                                Document doc = parser.getDomElement(content); // getting DOM element
                                 
                                NodeList nl = doc.getElementsByTagName(KEY_ITEM);
                                 
                                // looping through all item nodes <item>
                                for (int i = 0; i < nl.getLength(); i++) {
                                     name = parser.getValue(e, KEY_NAME); // name child value
                                     cost = parser.getValue(e, KEY_COST); // cost child value
                                     description = parser.getValue(e, KEY_DESC); // description child value
                                }
                                nameView.setText(name);
                                                                                
                            } catch (ParseException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }        
                    }
               }
           }); 
       
       } catch (ClientProtocolException e) {
           e.printStackTrace();
       } catch (final IOException e) {
           e.printStackTrace();
          }
        }
    }); test.start();
    }
    
}
При нажатии на кнопку получаю пустой TextView, хотя туда должно зуписаться значение name.... Как проверить какое значение получают мои переменные name, cost, description ?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
09.12.2012, 23:38 #18
подебагай.
Critically
10 / 10 / 0
Регистрация: 14.03.2011
Сообщений: 373
09.12.2012, 23:55  [ТС] #19
Приходит вот такая XMLка
XML
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<data>
  <code>1</code>
  <descr>
  </descr>
  <account>42,9</account>
  <price>,50</price>
</data>
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
10.12.2012, 00:13 #20
и что?
Critically
10 / 10 / 0
Регистрация: 14.03.2011
Сообщений: 373
10.12.2012, 00:30  [ТС] #21
Не получается что то... Ошибок полно на GetValue ругается
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
10.12.2012, 01:00 #22
какие ошибки?
Critically
10 / 10 / 0
Регистрация: 14.03.2011
Сообщений: 373
10.12.2012, 02:32  [ТС] #23
Так вроде бы нашел рабочий вариант:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
public void onClickFirst(View v){
    Thread test = new Thread(new Runnable()
    { 
        public void run()
        {  
            String str = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
                         "<data>" +
                         "<login>"+Login.getText()+"</login>" +
                         "<password>"+Password.getText()+"</password>" +
                         "</data>";
       
       HttpClient httpclient = new DefaultHttpClient();
       HttpPost httppost = new HttpPost("http://smsservice2.itakazan.ru/Service/XMLService.asmx/Balance");
 
       try {
           
           httppost.setEntity(new StringEntity(str));
           final HttpResponse response = httpclient.execute(httppost);
           nameView2.post(new Runnable(){
            public void run () {
                   HttpEntity mResEntityGet = response.getEntity();
                    if (mResEntityGet != null) {
                                    final String LOG_TAG = "myLogs";
                                    String tmp = "";
                            try {
                                content = EntityUtils.toString(mResEntityGet);
                                 nameView2.setText(content);
                                                                
                                XmlPullParser xpp = prepareXpp();
 
                                  while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) {
                                    switch (xpp.getEventType()) {
                                    // начало документа
                                    case XmlPullParser.START_DOCUMENT:
                                      Log.d(LOG_TAG, "START_DOCUMENT");
                                      break;
                                    // начало тэга
                                    case XmlPullParser.START_TAG:
                                      Log.d(LOG_TAG, "START_TAG: name = " + xpp.getName()
                                          + ", depth = " + xpp.getDepth() + ", attrCount = "
                                          + xpp.getAttributeCount());
                                      tmp = "";
                                      for (int i = 0; i < xpp.getAttributeCount(); i++) {
                                        tmp = tmp + xpp.getAttributeName(i) + " = "
                                            + xpp.getAttributeValue(i) + ", ";
                                      }
                                      if (!TextUtils.isEmpty(tmp))
                                        Log.d(LOG_TAG, "Attributes: " + tmp);
                                      break;
                                    // конец тэга
                                    case XmlPullParser.END_TAG:
                                      Log.d(LOG_TAG, "END_TAG: name = " + xpp.getName());
                                      break;
                                    // содержимое тэга
                                    case XmlPullParser.TEXT:
                                      Log.d(LOG_TAG, "text = " + xpp.getText());
                                      break;
 
                                    default:
                                      break;
                                    }
                                    // следующий элемент
                                    xpp.next();
                                  }
                                  Log.d(LOG_TAG, "END_DOCUMENT");
 
                                } catch (XmlPullParserException e) {
                                  e.printStackTrace();
                                } catch (IOException e) {
                                  e.printStackTrace();
                                }                                                                                                                   
                    }
            }
 
             XmlPullParser prepareXpp() throws XmlPullParserException {
                    // получаем фабрику
                    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
                    // включаем поддержку namespace (по умолчанию выключена)
                    factory.setNamespaceAware(true);
                    // создаем парсер
                    XmlPullParser xpp = factory.newPullParser();
                    // даем парсеру на вход Reader
                    xpp.setInput(new StringReader(content));
                    return xpp;
                  }
           });
XML-ка парсится, но не могли бы вы помочь, как это все дело организовать что бы: Если тег account, то взять из него значение и записать в переменную ?

Добавлено через 1 час 4 минуты
Ну вроде все разобрался... Кому интересно:
Java
1
2
3
4
case XmlPullParser.START_TAG:
String tagName = xpp.getName();
if (tagName.equalsIgnoreCase("code")){
nameView2.setText(xpp.nextText());
При этом, ниже НЕ должно стоять
Java
1
case XmlPullParser.END_TAG:
ато будет выбивать с ошибкой... Так как NextText() при этом возвращает null
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2012, 02:32
Привет! Вот еще темы с ответами:

Не передается POST запрос - Программирование Android
Надо передать POST запрос по адресу http://192.168.43.199/andr/request.php в файле request.php такой код: &lt;?php echo $_POST; ...

Потоки и post запрос - Программирование Android
Добрый вечер всем. Уже два дня не могу разобраться с выполнением post запроса на андроиде. Перечитал кучу статей. Знаю что с андроида 2.3...

Retrofit2, POST запрос - Программирование Android
Пытаюсь передать данные на веб сервер. читал туториалы но не могу понять до конца как это реализовать. Создал интерфейс, подключил все...

Retrofit 2 post запрос - Программирование Android
Делал реализацию клиент-сервер, в андроид при помощи retrofit. и встретился с проблемой как реализовать POST запрос. ( GET запрос у меня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.12.2012, 02:32
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru