HTTP Post funktioniert nicht

  • Antworten:7
  • Bentwortet
Gelöschter Account
  • Forum-Beiträge: 21

13.01.2011, 15:10:48 via Website

Hallo,

ich versuche zur Zeit einen HTTP Post vom Emulator zum Entwicklungsrechner auszuführen und dabei Parameter zu übergeben. Da es mit meinem Projekt nicht klappen will, habe ich einfach mal ein neues Testprojekt kreiert indem ich nur das HTTP Posten testen will.
Im groben und ganzen sende ich lediglich 2 Variablen an eine PHP Datei die sich auf meinem Entwicklungsrechner befindet und welche mir anschließend auf dem Emulator angezeigt werden soll. Mit Hilfe von WebView erscheint auf dem Emulator jedoch nur stets die Meldung "Klappt nicht", welche erscheinen soll wenn eine POST Variable nicht gesetzt ist.
Danke im Vorraus!

anbei mein Quellcode:

Manifest:
1<?xml version="1.0" encoding="utf-8"?>
2<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="hello.webview"
4 android:versionCode="1"
5 android:versionName="1.0">
6 <uses-permission android:name="android.permission.INTERNET" />
7 <uses-permission android:name="android.permission.NETWORK" />
8 <application
9 android:icon="@drawable/icon"
10 android:label="@string/app_name"
11 android:debuggable="true">
12 <activity android:name=".HelloWebView"
13 android:label="@string/app_name">
14 <intent-filter>
15 <action android:name="android.intent.action.MAIN" />
16 <category android:name="android.intent.category.LAUNCHER" />
17 </intent-filter>
18 </activity>
19
20 </application>
21 <uses-sdk android:minSdkVersion="8" />
22
23</manifest>

Die Java Klasse:
1package hello.webview;
2
3import java.io.IOException;
4
5public class HelloWebView extends Activity {
6 /** Called when the activity is first created. */
7 WebView mWebView;
8
9 @Override
10 public void onCreate(Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 setContentView(R.layout.main);
13 postData();
14
15
16 mWebView = (WebView) findViewById(R.id.webview);
17 mWebView.getSettings().setJavaScriptEnabled(true);
18 mWebView.loadUrl("http://10.0.2.2/postexample");
19 }
20
21 public void postData()
22 {
23 // Create a new HttpClient and Post Header
24 HttpClient httpclient = new DefaultHttpClient();
25 HttpPost httppost = new HttpPost("http://10.0.2.2/postexample.php");
26 try
27 {
28 // Add your data
29 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
30 nameValuePairs.add(new BasicNameValuePair("Artikel", "Zahnpasta"));
31 nameValuePairs.add(new BasicNameValuePair("Preis", "3.00"));
32 httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
33
34 // Execute HTTP Post Request
35 httpclient.execute(httppost);
36
37 }
38 catch (ClientProtocolException e)
39 {
40 // TODO Auto-generated catch block
41 }
42 catch (IOException e)
43 {
44 // TODO Auto-generated catch block
45 }
46 }
47}

und letzten Endes die PHP auf dem Server:
1<html>
2<head>
3<title>Ausgabe der eingegebenen Werte</title>
4</head>
5<body>
6<?php
7
8//$_POST[Artikel]="Bier";
9//$_POST[Preis]="1.20";
10
11if( isset($_POST[Artikel]) ) {
12echo "Artikel: $_POST[Artikel]<br>";
13echo "Preis: $_POST[Preis]<br>";
14}
15else{
16echo "Klappt nicht";
17}
18?>
19</body>
20</html>


Danke schonmal im Vorraus!

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

13.01.2011, 15:24:18 via Website

Schön das du Exceptions Ignorierst ;)

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Gelöschter Account
  • Forum-Beiträge: 21

13.01.2011, 15:48:55 via Website

Ja die habe ich vergessen, aber es kommen keine Exceptions zu Stande. Habe eben noch welche eingefügt aber es kam keine Meldung :).

Antworten
Maik S.
  • Forum-Beiträge: 38

13.01.2011, 17:37:07 via Website

und letzten Endes die PHP auf dem Server:
1<html>
2<head>
3<title>Ausgabe der eingegebenen Werte</title>
4</head>
5<body>
6<?php
7
8//$_POST[Artikel]="Bier";
9//$_POST[Preis]="1.20";
10
11if( isset($_POST[Artikel]) ) {
12echo "Artikel: $_POST[Artikel]<br>";
13echo "Preis: $_POST[Preis]<br>";
14}
15else{
16echo "Klappt nicht";
17}
18?>
19</body>
20</html>


Danke schonmal im Vorraus!

Versuchs mal so:
1if( isset($_POST['Artikel']) ) {
2echo "Artikel: " .$_POST['Artikel']. "<br>";
3echo "Preis: " .$_POST['Preis']. "<br>";
4}
5else{
6echo "Klappt nicht";
7}

Ich meine, es müsste einfach an den Anführungszeichen in $_POST['Artikel'] liegen.

Und bei anderen Exceptions, wenn du bspw die Exception "IllegalStateException: Invalid use of SingleClientConnManager: connection still allocated. " bekommst:

1HttpResponse response = httpclient.execute(httppost); ;
2HttpEntity entity = response.getEntity();
3if(entity != null) {
4entity.consumeContent();
5}

— geändert am 13.01.2011, 19:48:18

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

13.01.2011, 17:53:46 via Website

Schlimmstenfalls kann man einfach mal folgendes PHP Skript mit dem Post beschicken, um zu erfahren in welchen Variablen die POST Parameter am SErver abgelegt werden. Das kann je nach Installation differieren.

<?php
phpinfo();
?>

lg Voss

Antworten
Gelöschter Account
  • Forum-Beiträge: 21

14.01.2011, 13:22:37 via Website

Danke für eure Antworten.
Ich hatte es mit den Anführungszeichen auch schon probiert aber daran lag es nicht.
Aber ich habe bei genauerem Hinsehen des Quellcodes erkannt, dass ich bei dem WebView Aufruf die Methode loadURL ausführe, was bekanntlich ein GET-Aufruf ist, da ist es selbstverständlich dass die POST Variable leer ist. Versuche es jetzt erst mal mit der Methode postURL dass ganze auszuführen. Werde euch aber auf dem laufenden halten!

Antworten
Gelöschter Account
  • Forum-Beiträge: 21

14.01.2011, 15:02:46 via Website

So Freunde,
ich hab es jetzt geschafft mit Hilfe der Klasse WebView und ihrer Methode postUrl einen POST Aufruf zu starten und habe dabei die gewünschten Variablen als byte array angehangen. Das Ergebnis seht ihr unten:

1package hello.webview;
2
3import org.apache.http.util.EncodingUtils;
4
5import android.app.Activity;
6import android.os.Bundle;
7import android.webkit.WebView;
8
9public class HelloWebView extends Activity {
10 /** Called when the activity is first created. */
11 WebView mWebView;
12 byte Artikel[];
13
14 @Override
15 public void onCreate(Bundle savedInstanceState) {
16 super.onCreate(savedInstanceState);
17 setContentView(R.layout.main);
18
19 String postData = "Artikel=Zahnpasta&Preis=3.00";
20
21 mWebView = (WebView) findViewById(R.id.webview);
22 mWebView.getSettings().setJavaScriptEnabled(true);
23 mWebView.postUrl("http://10.0.2.2/postexample", EncodingUtils.getBytes(postData, "BASE64"));
24 }
25}

Das ist schon mal ein kleiner Erfolg. Meine Vermutung ist ja, dass der eigentlich HTTP Post aus der vorherigem Quellcode funktioniert hat, jedoch durch den falschen Aufruf der Klasse WebView wieder quasi überschrieben wurde. Hat jemand eine Idee wie ich, nachdem ich einen POST ausgeführt habe überprüfen kann ob in der POST Variable auch der Wert enthalten ist den ich übergeben hab?
Meine Vorstellung: Wenn die POST Variable übernommen wurde, dann starte eine neue Activity.
Hat jemand eine Idee zur Umsetzung?

Antworten
Gelöschter Account
  • Forum-Beiträge: 21

17.01.2011, 17:02:19 via Website

Hi,
hab es gelöst indem ich mir den StatusCode der Response hab ausgeben lassen, und nach erfolgreicher Überprüfung starte ich eine neue Activitiy.

Antworten