J'ai de l'expérience avec PHP, JavaScript et beaucoup d'autres langages de script, mais je n'ai pas beaucoup d'expérience avec Java ou Android.
Je cherche un moyen d'envoyer des données POST à un script PHP et d'afficher le résultat.
la source
J'ai de l'expérience avec PHP, JavaScript et beaucoup d'autres langages de script, mais je n'ai pas beaucoup d'expérience avec Java ou Android.
Je cherche un moyen d'envoyer des données POST à un script PHP et d'afficher le résultat.
* Réponse mise à jour qui fonctionne sur Android 6.0+. Merci à @Rohit Suthar , @Tamis Bolvari et @sudhiskr pour les commentaires. *
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());
}
}
}
Références:
Réponse plus ancienne
Remarque: cette solution est obsolète. Il ne fonctionne que sur les appareils Android jusqu'à 5.1. Android 6.0 et supérieur n'incluent pas le client Apache http utilisé dans cette réponse.
Le client Http d'Apache Commons est le chemin à parcourir. Il est déjà inclus dans Android. Voici un exemple simple de la façon d'utiliser HTTP Post en l'utilisant.
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"));
pourUTF-8
entrer.HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" sont obsolètes. Veuillez suggérer une autre solution.DefaultHttpClient
obsolète.NOT
montre unPOST
exemple. Ce serait bien de modifier la6.0
réponse. Il s'agit d'un moteur de recherche optimisé pour afficher le premier résultat, ce qui est un peu trompeur.pour Android => 5
Les classes org.apache.http et AndroidHttpClient sont obsolètes dans Android 5.1 . Ces classes ne sont plus maintenues et vous devez migrer tout code d'application utilisant ces API vers les classes URLConnection dès que possible.
https://developer.android.com/about/versions/android-5.1.html#http
Pensé à partager mon code en utilisant HttpUrlConnection
...
vous pouvez également poster la méthode:
Mise à jour 21/02/2016
pour la demande de publication avec json , voir cet exemple:
MISE À JOUR 24/08/2016
Utilisez la meilleure bibliothèque, comme:
car :
Sur des niveaux d'API inférieurs (principalement sur Gingerbread et Froyo), HttpUrlConnection et HttpClient sont loin d'être parfaits
Depuis l'introduction de Honeycomb (API 11), il est obligatoire d'effectuer des opérations réseau sur un thread séparé, différent du thread principal
la source
performPostCall()
getPostData()
devrait remplacer pargetPostDataString()
De cette façon, nous pouvons envoyer des données avec la méthode http post et obtenir le résultat
la source
Voici un exemple de la façon de POSTER des données en plusieurs parties SANS utiliser de bibliothèques Apache externes:
la source
à la réponse @primpop j'ajouterais comment convertir la réponse dans une chaîne:
Voici un exemple de convertStramToString .
la source
HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" sont obsolètes. Veuillez suggérer une autre solution.Mieux vaut utiliser Apache Commons HttpClient, qui est également déjà inclus dans Android. Jetez un œil au développeur Android: Résumé du package du client HTTP Apache pour obtenir des informations générales sur l'API.
la source
Vous pouvez l'utiliser pour envoyer une demande HTTP POST à une URL. Vous pouvez facilement envoyer une demande et obtenir une réponse. J'utilise toujours ça. Je travaille bien pour moi.
Vous devez également ajouter un fichier Jar ci-dessous dans les bibliothèques
Enfin éditez votre build.gradle
Dans le dernier Reconstruisez votre projet.
la source
Utilisez la
okHttp
bibliothèque open source de Square.okHttp
fonctionne à partir d'Android 2.3 et plus et dispose d'une licence Apache 2.0 sur GitHub .L'envoi de données POST est aussi simple que l'ajout de ce qui suit dans une AsyncTask:
okHttp
possède également un espace de noms sur maven, il est donc simple de l'ajouter à votre projet Android Studio. Ajoutez simplementcompile 'com.squareup.okhttp3:okhttp:3.11.0'
à build.gradle de votre application.Code complet
Ajoutez les éléments suivants à votre activité:
Et appelez-le en utilisant:
la source
Pour moi travaille ensuite:
la source
Vous pouvez utiliser
URLConnection
avec , (pour envoyer des données) et (pour recevoir). Sun a un exemple pour exactement cela .setDoOutput
(true)
getOutputStream()
getInputStream()
la source
Si vous souhaitez simplement ajouter des données à l'URL, vous pouvez le faire en utilisant HttpUrlConnection, car HttpClient est désormais obsolète. Une meilleure façon serait d’utiliser une bibliothèque comme
Rénovation de Volley
Nous pouvons publier des données dans le script php et récupérer le résultat et l'afficher en utilisant ce code effectué via la classe AsyncTask.
Mais l'utilisation de bibliothèques telles que volley ou retrofit est une bien meilleure option car la classe Asynctask et HttpurlConnection sont plus lentes que les bibliothèques. De plus, la bibliothèque va tout récupérer et est également plus rapide.
la source
J'ai trouvé cet exemple utile avec ce didacticiel vidéo.
la source
Méthode pour publier des données en tant que requête HTTP,
la source
HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" sont obsolètes. Veuillez suggérer une autre solution.Vous pouvez POSTER une requête HttpRequest à l'aide de la classe WebServer et suivre la réponse dans son interface d'écoute.
Créez maintenant un DataRack pour lier vos données
Maintenant, envoyez simplement la demande POST avec ce rack
Vous devez inclure ma bibliothèque pour cela. Documentations ici
la source
Dans les nouvelles versions d'Android, vous devez placer toutes les demandes d'E / S Web dans un nouveau thread. AsyncTask fonctionne mieux pour les petites demandes.
la source