Ich habe Erfahrung mit PHP, JavaScript und vielen anderen Skriptsprachen, aber ich habe nicht viel Erfahrung mit Java oder Android.
Ich suche nach einer Möglichkeit, POST- Daten an ein PHP-Skript zu senden und das Ergebnis anzuzeigen.
quelle
Ich habe Erfahrung mit PHP, JavaScript und vielen anderen Skriptsprachen, aber ich habe nicht viel Erfahrung mit Java oder Android.
Ich suche nach einer Möglichkeit, POST- Daten an ein PHP-Skript zu senden und das Ergebnis anzuzeigen.
* Aktualisierte Antwort, die unter Android 6.0+ funktioniert. Vielen Dank an @Rohit Suthar , @Tamis Bolvari und @sudhiskr für die Kommentare. * *
public class CallAPI extends AsyncTask<String, String, String> {
public CallAPI(){
//set context variables if required
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
String urlString = params[0]; // URL to call
String data = params[1]; //data to post
OutputStream out = null;
try {
URL url = new URL(urlString);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
out = new BufferedOutputStream(urlConnection.getOutputStream());
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
writer.write(data);
writer.flush();
writer.close();
out.close();
urlConnection.connect();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
Verweise:
Ältere Antwort
Hinweis: Diese Lösung ist veraltet. Es funktioniert nur auf Android-Geräten bis 5.1. Android 6.0 und höher enthalten nicht den in dieser Antwort verwendeten Apache http-Client.
Der HTTP-Client von Apache Commons ist der richtige Weg. Es ist bereits in Android enthalten. Hier ist ein einfaches Beispiel für die Verwendung von HTTP Post.
public void postData() {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php");
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("id", "12345"));
nameValuePairs.add(new BasicNameValuePair("stringdata", "Hi"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
zumUTF-8
Einschließen.HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" sind veraltet. Bitte schlagen Sie eine andere Lösung vor.DefaultHttpClient
ist veraltet.NOT
zeigt einPOST
Beispiel. Es wäre schön, die6.0
Antwort zu bearbeiten . Dies ist eine Suchmaschine, die so optimiert ist, dass sie als erstes Ergebnis angezeigt wird, was irreführend ist.für Android => 5
Die Klassen org.apache.http und AndroidHttpClient sind in Android 5.1 veraltet . Diese Klassen werden nicht mehr verwaltet und Sie sollten App-Code mithilfe dieser APIs so schnell wie möglich auf die URLConnection- Klassen migrieren .
https://developer.android.com/about/versions/android-5.1.html#http
Ich dachte daran, meinen Code mit HttpUrlConnection zu teilen
...
können Sie auch Sende - Methode:
Update 21/02/2016
Informationen zur Post- Anfrage mit json finden Sie in diesem Beispiel:
UPDATE 24/08/2016
Verwenden Sie eine der besten Bibliotheken, z.
weil :
Auf niedrigeren API-Ebenen (hauptsächlich auf Gingerbread und Froyo) sind HttpUrlConnection und HttpClient alles andere als perfekt
Seit der Einführung von Honeycomb (API 11) ist es obligatorisch, Netzwerkvorgänge in einem separaten Thread auszuführen, der sich vom Hauptthread unterscheidet
quelle
performPostCall()
getPostData()
sollte ersetzen durchgetPostDataString()
Auf diese Weise können wir Daten mit der http-Post-Methode senden und Ergebnisse erhalten
quelle
Dies ist ein Beispiel für das POSTEN mehrteiliger Daten OHNE Verwendung externer Apache-Bibliotheken:
quelle
zu @primpop Antwort Ich würde hinzufügen, wie die Antwort in einen String konvertiert wird:
Hier ist ein Beispiel für convertStramToString .
quelle
HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" sind veraltet. Bitte schlagen Sie eine andere Lösung vor.Verwenden Sie besser Apache Commons HttpClient, das bereits in Android enthalten ist. Hier finden Sie aktuelle Android Developer: Apache HTTP - Client - Paket Zusammenfassung für allgemeine api info.
quelle
Sie können dies verwenden, um eine HTTP-POST-Anforderung an eine URL zu senden. Sie können einfach eine Anfrage senden und eine Antwort erhalten. Ich benutze das immer. Ich arbeite gut für mich.
Sie müssen auch die folgende Jar-Datei in libs folde hinzufügen
Bearbeiten Sie schließlich Ihr build.gradle
Im letzten Erstellen Sie Ihr Projekt neu.
quelle
Verwenden Sie die Open Source-
okHttp
Bibliothek von Square.okHttp
funktioniert ab Android 2.3 und hat eine Apache 2.0 Lizenz auf GitHub .Das Senden von POST-Daten ist so einfach wie das Hinzufügen der folgenden Elemente in einer AsyncTask:
okHttp
hat auch einen Namespace auf maven, so dass das Hinzufügen zu Ihrem Android Studio-Projekt einfach ist. Fügen Sie einfachcompile 'com.squareup.okhttp3:okhttp:3.11.0'
zu Ihren App build.gradle.Vollständiger Code
Fügen Sie Ihrer Aktivität Folgendes hinzu:
Und nennen Sie es mit:
quelle
Für mich funktioniert weiter:
quelle
Sie können verwenden
URLConnection
mit , (zum Senden von Daten), und (zur Aufnahme). Sun hat genau dafür ein Beispiel .setDoOutput
(true)
getOutputStream()
getInputStream()
quelle
Wenn Sie nur Daten an die URL anhängen möchten, können Sie dies mit HttpUrlConnection tun, da HttpClient jetzt veraltet ist. Ein besserer Weg wäre, eine Bibliothek wie
Volley Nachrüstung
Wir können Daten in das PHP-Skript posten und das Ergebnis abrufen und anzeigen, indem wir diesen Code verwenden, der über die AsyncTask-Klasse ausgeführt wird.
Die Verwendung von Bibliotheken wie Volley oder Nachrüstung ist jedoch eine viel bessere Option, da die Asynctask-Klasse und HttpurlConnection im Vergleich zu Bibliotheken langsamer sind. Auch die Bibliothek holt alles und ist auch schneller.
quelle
Ich habe dieses hilfreiche Beispiel mit diesem Video-Tutorial gefunden.
quelle
Methode zum Posten von Daten als HTTP-Anfrage,
quelle
HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" sind veraltet. Bitte schlagen Sie eine andere Lösung vor.Sie können eine HttpRequest mithilfe der WebServer-Klasse POSTEN und die Antwort in der Listener-Oberfläche verfolgen.
Erstellen Sie nun ein DataRack, um Ihre Daten zu binden
Senden Sie nun einfach die POST-Anfrage mit diesem Rack
Dazu müssen Sie meine Bibliothek hinzufügen. Dokumentationen hier
quelle
In neueren Versionen von Android müssen Sie alle Web-E / A-Anforderungen in einen neuen Thread einfügen. AsyncTask eignet sich am besten für kleine Anfragen.
quelle