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

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

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

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

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

Добрый день, подскажите, как сделать post запрос, отправляться должна xml вида:
XML
1
2
3
4
5
<?xml version="1.0" encoding="UTF-8" ?>
<data>
<login>debugger</login>
<password>123456</password>
</data>
В интернете смотрел примеры, они не подходят, а те что я пробовал как пример делать тупо крашат приложение...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
Если честно я не знал в какой раздел лучше написать так как моя задача затрагивает несколько областей программирования. Если что извините...

22
prtigger
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 6
07.12.2012, 21:03 #2
Как-то примерно так:

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
string XML="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<data>
<login>debugger</login>
<password>123456</password>
</data>";
 
String requestString = "http://" + address + ":" + port + "/Portal";
 
String sendXML = "Document="+XML;
 
URL url = new URL(requestString);
URLConnection connection = url.openConnection();
 
HttpURLConnection httpConnection = (HttpURLConnection) connection;
httpConnection.setRequestMethod("POST");
 
httpConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
httpConnection.setRequestProperty("Accept-Encoding","gzip, deflate");
httpConnection.setRequestProperty("Cache-Control","no-cache");
httpConnection.setRequestProperty("Content-Length", ""+ Integer.toString(sendXML.getBytes().length));
httpConnection.setDoOutput(true);
httpConnection.setDoInput(true);
 
httpConnection.connect();
 
// здесь можем писать в поток данные запроса
OutputStream os = httpConnection.getOutputStream();
os.write(sendXML.getBytes());
os.flush();
os.close();
 
int responseCode = httpConnection.getResponseCode();
 
if (responseCode == HttpURLConnection.HTTP_OK)
{
    InputStream in = httpConnection.getInputStream();
    InputStreamReader isr = new InputStreamReader(in,"windows-1251");
 
    StringBuffer data = new StringBuffer();
    int ch;
    while ((ch = isr.read()) != -1)
    {
        data.append((char) ch);
    }
 
    resultString = new String(data.toString());
    resultString = "" + resultString;
} else
{
    errorText = "Сервер не отвечает";
    return;
}
Document - имя параметра, из которого извлекается XML в обработчике на сервере
0
Critically
10 / 10 / 0
Регистрация: 14.03.2011
Сообщений: 380
07.12.2012, 21:41  [ТС] #3
Не работает, запихал в проект, куча ошибок... Нажал на кнопку logcat вообще взбесился ))
0
prtigger
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 6
07.12.2012, 21:55 #4
Что за ошибки-то??
Хотя бы пример.

Сразу хочу предупредить, в версиях андроида >3 запрещено обращаться к сети в интерфейсном потоке.
Этот код надо создавать в отдельном потоке.

Что-то типа:
Java
1
2
3
4
5
6
7
Thread t = new Thread(new Runnable()
{
    public void run()
    {
                           // Вот тут код обращения в сеть
    }
}).start();
0
Critically
10 / 10 / 0
Регистрация: 14.03.2011
Сообщений: 380
07.12.2012, 23:20  [ТС] #5
Я вроде для 2.2 делаю ) Я в этом не особо разбираюсь, новичок...

Добавлено через 3 минуты
Ну суть я кажется уловил, тоесть если запускать это приложение на 3.0 и выше андроидах, то нужно делать через Runables ?
0
prtigger
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 6
08.12.2012, 19:49 #6
Да не, само приложение ни к чему.
Именно тот код, что работает с сетью.

Что там с ошибками? давай лог, подскажу, чем могу
0
Critically
10 / 10 / 0
Регистрация: 14.03.2011
Сообщений: 380
09.12.2012, 02:21  [ТС] #7
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
package com.example.test;
 
import java.io.IOException;
 
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
 
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
 
public class MainActivity extends Activity {
    TextView nameView;
    @Override
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        nameView = (TextView) findViewById(R.id.textView1); 
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    
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));
           HttpResponse response = httpclient.execute(httppost);
           nameView.setText(response.toString());  
       } catch (ClientProtocolException e) {
 
       } catch (IOException e) {
          nameView.setText("Error");
       }
        }
    }); test.start();
    }
    
}
Вот такой код я написал...
В проекте указывал версию андроида 4.0.3
Когда на кнопку нажимаю, приложение крашится...
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
09.12.2012, 02:29 #8
читайте логи.

Добавлено через 1 минуту
Цитата Сообщение от Critically Посмотреть сообщение
nameView.setText(response.toString());
Цитата Сообщение от Critically Посмотреть сообщение
nameView.setText("Error");
нельзя из другого потока...

Добавлено через 1 минуту
Java
1
2
3
4
5
nameView.post(new Runnable(){
 public void run () {
  nameView.setText(response.toString());
 }
});
1
Critically
10 / 10 / 0
Регистрация: 14.03.2011
Сообщений: 380
09.12.2012, 02:39  [ТС] #9
А вот собственно logcat

Код
12-08 22:35:28.357: D/dalvikvm(531): Not late-enabling CheckJNI (already on)
12-08 22:35:29.217: I/dalvikvm(531): threadid=3: reacting to signal 3
12-08 22:35:29.277: I/dalvikvm(531): Wrote stack traces to '/data/anr/traces.txt'
12-08 22:35:29.547: D/gralloc_goldfish(531): Emulator without GPU emulation detected.
12-08 22:35:39.636: W/dalvikvm(531): threadid=11: thread exiting with uncaught exception (group=0x409c01f8)
12-08 22:35:39.646: E/AndroidRuntime(531): FATAL EXCEPTION: Thread-72
12-08 22:35:39.646: E/AndroidRuntime(531): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
12-08 22:35:39.646: E/AndroidRuntime(531): 	at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4039)
12-08 22:35:39.646: E/AndroidRuntime(531): 	at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:709)
12-08 22:35:39.646: E/AndroidRuntime(531): 	at android.view.View.requestLayout(View.java:12675)
12-08 22:35:39.646: E/AndroidRuntime(531): 	at android.view.View.requestLayout(View.java:12675)
12-08 22:35:39.646: E/AndroidRuntime(531): 	at android.view.View.requestLayout(View.java:12675)
12-08 22:35:39.646: E/AndroidRuntime(531): 	at android.view.View.requestLayout(View.java:12675)
12-08 22:35:39.646: E/AndroidRuntime(531): 	at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:268)
12-08 22:35:39.646: E/AndroidRuntime(531): 	at android.view.View.requestLayout(View.java:12675)
12-08 22:35:39.646: E/AndroidRuntime(531): 	at android.widget.TextView.checkForRelayout(TextView.java:6773)
12-08 22:35:39.646: E/AndroidRuntime(531): 	at android.widget.TextView.setText(TextView.java:3306)
12-08 22:35:39.646: E/AndroidRuntime(531): 	at android.widget.TextView.setText(TextView.java:3162)
12-08 22:35:39.646: E/AndroidRuntime(531): 	at android.widget.TextView.setText(TextView.java:3137)
12-08 22:35:39.646: E/AndroidRuntime(531): 	at com.example.test.MainActivity$1.run(MainActivity.java:56)
12-08 22:35:39.646: E/AndroidRuntime(531): 	at java.lang.Thread.run(Thread.java:856)
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
09.12.2012, 04:13 #10
Цитата Сообщение от V0v1k Посмотреть сообщение
Java
1
2
3
4
5
nameView.post(new Runnable(){
*public void run () {
* nameView.setText(response.toString());
*}
});
.....
1
Critically
10 / 10 / 0
Регистрация: 14.03.2011
Сообщений: 380
09.12.2012, 15:55  [ТС] #11
Буду признателен, если подскажите куда это нужно вставить ?
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
09.12.2012, 16:21 #12
туда же.
1
Critically
10 / 10 / 0
Регистрация: 14.03.2011
Сообщений: 380
09.12.2012, 19:09  [ТС] #13
Дому буду попробую заменить, лог выложу... Буду надеяться конечно что все пройдет удачно..

Добавлено через 1 час 42 минуты
Вот вставил как вы сказали... Только программа попросила добавить Final... Вроде заработало в текст вывело "Error"... Теперь вопрос, как узнать почему Error ? Как отловить ошибку ? Debugger Eclipsa пока не очень понятен для меня.. В манифесте прописал debbugebble=true;
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
       try {
           httppost.setEntity(new StringEntity(str));
           final HttpResponse response = httpclient.execute(httppost); <----- Вставил final
           nameView.post(new Runnable(){
               public void run () {
                nameView.setText(response.toString());
               }
              }); 
       } catch (ClientProtocolException e) {
 
       } catch (IOException e) {
           nameView.post(new Runnable(){
               public void run () {
                nameView.setText("Error");
               }
              });
       }
        }
    }); test.start();
    }
    
}
Добавлено через 10 минут
Java
1
final HttpResponse response = httpclient.execute(httppost);
Вот с этой строчки перескакивает на Exception... Как узнать что ему не нравиться ?

В манифесте permissions Internet прописан
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
09.12.2012, 19:20 #14
e.printStackTrace();
0
Critically
10 / 10 / 0
Регистрация: 14.03.2011
Сообщений: 380
09.12.2012, 21:02  [ТС] #15
Куда это вписать ?

Добавлено через 11 минут
java.net.UnknownHostException: Unable to resolve host "smsservice2.itakazan.ru": No address associated with hostnam
Вот такая ошибка вылезла, что это значит ? Я с Delphi post запросы шлю на этот же адрес и все хорошо...

Добавлено через 25 минут
XML
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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />
    <permission android:name="android.permission.INTERNET"></permission>
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity
            android:name="com.example.test.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
Может кроме android.permission.INTERNET надо еще что то вписать... Тестил и на телефоне с интернетом и на эмуляторе...

Добавлено через 10 минут
Вроде заработало... Теперь приходит вот это org.apache.http.message.BasicHttpResponse@(Какие то цифры каждый раз меняющиеся)... Что это такое ? В ответ должна приходить XMLка (((

Добавлено через 17 минут
Ага приходит это из за того что nameView.setText(response.toString()); Как же его обработать тогда ?

Добавлено через 30 минут
Ну все ништяк, приходит ответ в виде XMLки, теперь вопрос, как ее спарсить ? Может кто с этим помочь ?
0
09.12.2012, 21:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2012, 21:02
Привет! Вот еще темы с ответами:

Не передается 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 запрос у меня...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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