Guide pas à pas pour l'envoi de données d'une application Android au serveur – Bien choisir son serveur d impression
La communication entre l'application Android et le serveur est l'une des exigences les plus courantes. Dans de nombreux cas, vous devez collecter des informations sur l'utilisateur dans votre application Android et les stocker dans la base de données pour une utilisation ultérieure.
Dans ce tutoriel, nous allons créer une interface utilisateur dans laquelle l’utilisateur sélectionnera certains choix et soumettra les informations. Les données seront ensuite traitées par un script sur le serveur. Ensuite, ces données seront stockées dans une table d'une base de données. De manière plus concise, nous allons créer une application de prévision dans laquelle les utilisateurs prédisent un match de football et ces prévisions sont stockées sur le serveur.
Entrée utilisateur dans l'application Android:
Maintenant, nous allons créer notre application Android et prendre les entrées de l'utilisateur.
- Ouvrez Eclipse et démarrez une nouvelle application Android.
- Changez le nom de l'activité du programme de lancement en PredictionActivity.java à partir du nom de l'activité par défaut MainActivity.java. Le nom du fichier de mise en page sera activity_prediction.xml.
- Créez une nouvelle classe nommée Servicehandler.java et enregistrez-la dans le dossier src.
activity_prediction.xml:
C'est le fichier de mise en page principal de votre application. Nous avons utilisé un tableau pour afficher les informations sous forme de tableau. Il y a trois (3) questions et trois (3) options à choisir pour chaque question. Les options sont dans le bouton radio. Le format sera comme ça:
- Combien de buts seront marqués dans le match?
- Combien de cartons jaunes seront affichés?
- Quelle sera la différence de pourcentage de possession de balle entre deux équipes?
Nous allons faire 6 lignes de table: Trois (3) lignes pour trois questions et trois lignes pour les options des trois questions. La première option de chaque question est sélectionnée par défaut lors du lancement de l'application. L'utilisateur peut modifier la sélection et soumettre sa réponse.
Voici le code source de activity_prediction.xml
Code:
AndroidManifest.xml:
C'est le fichier de configuration de votre application. Voici un changement important que vous devez faire: Ajoutez la ligne suivante:
Code:
Comme nous devons accéder à Internet dans cette application pour envoyer des données sur le serveur, nous devons les mentionner dans le fichier manifeste. Donc, notre fichier manifeste sera quelque chose comme ça:
Code:
ServiceHandler.java:
Ce fichier est utilisé pour la gestion des requêtes et des réponses http. Il existe une fonction makeServiceCall avec deux signatures différentes (surcharge de la fonction). Vous pouvez utiliser n'importe lequel d'entre eux selon vos besoins.
- String makeServiceCall (URL de chaîne, méthode int)
- String makeServiceCall (URL de chaîne, méthode int, List
params)
Regardons les paramètres:
- String url: Indiquez l'URL que vous souhaitez utiliser sur le serveur.
- int method: indiquez la méthode que vous souhaitez utiliser, GET ou POST.
- liste
params: Fournit la liste des paramètres que vous souhaitez envoyer pour obtenir votre réponse filtrée ou pour stocker de nouvelles informations.
Voici le code complet du fichier ServiceHandler.java.
Code:
package com.example.testjsonparsing; importer java.io.BufferedReader; importer java.io.IOException; importer java.io.InputStream; importer java.io.InputStreamReader; importer java.io.UnsupportedEncodingException; importer java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; importer org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.impl.client.DefaultHttpClient; importer android.util.Log; Classe publique ServiceHandler { static InputStream est = null; static String response = null; public final statique int GET = 1; public final statique int POST = 2; public ServiceHandler () public String makeServiceCall (URL de chaîne, méthode int) return this.makeServiceCall (url, méthode, null); public String makeServiceCall (URL de chaîne, méthode int, listeparams) essayer DefaultHttpClient httpClient = new DefaultHttpClient (); HttpEntity httpEntity = null; HttpResponse httpResponse = null; if (méthode == POST) HttpPost httpPost = new HttpPost (url); if (params! = null) httpPost.setEntity (new UrlEncodedFormEntity (params)); httpResponse = httpClient.execute (httpPost); else if (méthode == GET) if (params! = null) String paramString = URLEncodedUtils .format (params, "utf-8"); url + = "?" + paramString; HttpGet httpGet = new HttpGet (url); httpResponse = httpClient.execute (httpGet); httpEntity = httpResponse.getEntity (); est = httpEntity.getContent (); catch (UnsupportedEncodingException e) e.printStackTrace (); catch (ClientProtocolException e) e.printStackTrace (); catch (IOException e) e.printStackTrace (); essayer Lecteur BufferedReader = new BufferedReader (new InputStreamReader ( est "UTF-8"), 8); StringBuilder sb = new StringBuilder (); Chaîne de caractères = null; while ((line = reader.readLine ())! = null) sb.append (line + " n"); est près(); réponse = sb.toString (); catch (Exception e) Log.e ("Erreur de mémoire tampon", "Erreur:" + e.toString ()); retour réponse; }
PredictionActivity.java:
Ce fichier est utilisé pour envoyer des informations au serveur via la classe de gestionnaire de service à l'aide de la méthode HTTP POST. Pour effectuer cela, nous devons considérer les choses suivantes:
N'implémentez pas la communication http dans le thread principal. Cela bloquera votre thread principal, ainsi l'interface utilisateur sera bloquée et une situation indésirable pourrait se produire. Nous allons utiliser la méthode Asynctask pour établir une communication avec le serveur.
Examinons les étapes à suivre:
1. Notre classe PredictionAcitivity étendra la classe d'activité.
Code:
Classe publique PredictionActivity étend Activity
2. Indiquez l'URL du script qui recevra les données de votre application. Comme nous utilisons localhost, nous utilisons le serveur localhost ip http://10.0.2.2
Code:
private String URL_ITEMS = "http://10.0.2.2/tech/new_predict.php";
3. Déclarez trois variables de chaîne qui seront utilisées pour stocker la sélection de l'utilisateur. Initialisez ces variables à une valeur par défaut.
Code:
String numOfGoal = "1"; String numOfCard = "1"; String diffOfPos = "1";
4. Créez un bouton et trois objets groupe radio et liez ces objets aux ressources du fichier de mise en page.
Code:
Bouton privé btnAddPrediction; btnAddPrediction = (bouton) findViewById (R.id.submit); Objectif RadioGroup = (RadioGroup) findViewById (R.id.answer1); Carte RadioGroup = (RadioGroup) findViewById (R.id.answer2); RadioGroup pos = (RadioGroup) findViewById (R.id.answer3);
5. Ajoutez un événement d’écoute de changement de contrôle au groupe de radios. Lorsqu'un bouton radio est sélectionné, l'événement est géré par cet écouteur. Ici, nous avons défini l’option sélectionnée sur la variable chaîne.
Code:
Objectif RadioGroup = (RadioGroup) findViewById (R.id.answer1); goal.setOnCheckedChangeListener (nouveau OnCheckedChangeListener () public void onCheckedChanged (groupe RadioGroup, int vérifiéId) // TODO Stub de méthode généré automatiquement commutateur (ID vérifié) cas R.id.answer1A: numOfGoal = "1"; Pause; case R.id.answer1B: numOfGoal = "2"; Pause; cas R.id.answer1C: numOfGoal = "3"; Pause; );
6. Appliquez la même méthode pour la carte de radiogroupe à deux repos et pos.
7. Ajoutez un événement d'écoute au clic pour l'objet bouton. Lorsque le bouton d'envoi est cliqué, l'événement d'écoute est exécuté et l'opération est effectuée conformément à nos exigences. Dans ce tutoriel, nous enverrons les options sélectionnées à un serveur. Pour cette tâche, nous allons exécuter une méthode nommée AddNewPrediction avec trois paramètres numOfGoal, numOfCard et diffOfPos.
Code:
btnAddPrediction = (bouton) findViewById (R.id.submit); btnAddPrediction.setOnClickListener (new View.OnClickListener () vide public onClick (Afficher v) // TODO Stub de méthode généré automatiquement new AddNewPrediction (). execute (numOfGoal, numOfCard, diffOfPos); );
8. Créez une classe qui étendra asynctask. Nous allons établir une communication avec le serveur et envoyer les données de l'utilisateur d'une application à un serveur.
Code:
classe privée GetFixture étend AsyncTask< String, Void, Void>
9. Regardez les paramètres de cette classe. Les trois types utilisés par une tâche asynchrone sont les suivants:
- Params, le type des paramètres envoyés à la tâche lors de son exécution. Ici, trois variables de chaîne sont envoyées à la tâche en arrière-plan; le type est donc String.
- Progress, le type des unités de progression publiées lors du calcul en arrière-plan. Nous n'utilisons aucune unité de progression ici, donc le type est Void.
- Résultat, le type du résultat du calcul en arrière-plan. Comme nous n'utilisons pas le résultat, le type est Void.
10. Substituez 3 méthodes dans cette classe:
void protégé onPreExecute ()
: Cette fonction effectue toute tâche requise avant l'extraction de données pour l'envoi de données. Nous ne faisons rien dans cette fonction. Vous pouvez afficher toute barre de progression, chargement de messages ou autre chose ici.protected Void doInBackground (String ... arg)
: Les principaux travaux de fond sont effectués ici. Examinons les étapes à suivre ici:- Extrayez les paramètres de chaîne reçus.
Code:
But de la chaîneNo = arg[0]; String cardNo = arg[1]; String posDiff = arg[2];
- Préparez le paramètre à publier à l'aide de namevalue pair.
Code:
liste
params = new ArrayList (); params.add (new BasicNameValuePair ("goalNo", goalNo)); params.add (new BasicNameValuePair ("cardNo", cardNo)); params.add (new BasicNameValuePair ("posDiff", posDiff)); - À l'aide de la classe ServiceHandler, appelez la fonction makeServicecall avec l'URL, la méthode et les paramètres.
Code:
ServiceHandler serviceClient = new ServiceHandler (); String json = serviceClient.makeServiceCall (URL_NEW_PREDICTION, ServiceHandler.POST, paramètres);
- Extrayez les paramètres de chaîne reçus.
- void protected onPostExecute (résultat de void):
Cette fonction effectue toute action requise après la communication en arrière-plan. Dans cette application, nous ne ferons rien après l'exécution.
Voici le code source du fichier PredictionActivity.java.
Code:
package com.example.predictiontest; importer java.util.ArrayList; importer java.util.List; importer org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; importer org.json.JSONException; import org.json.JSONObject; importer android.os.AsyncTask; importer android.os.Bundle; importer android.app.Activity; importer android.util.Log; importer android.view.Menu; importer android.view.View; importer android.widget.Button; importer android.widget.RadioGroup; importer android.widget.RadioGroup.OnCheckedChangeListener; Classe publique PredictionActivity étend Activity { private String URL_NEW_PREDICTION = "http://10.0.2.2/tech/new_predict.php"; Bouton privé btnAddPrediction; String numOfGoal = "1"; String numOfCard = "1"; String diffOfPos = "1"; @Passer outre public void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_prediction); Objectif RadioGroup = (RadioGroup) findViewById (R.id.answer1); goal.setOnCheckedChangeListener (nouveau OnCheckedChangeListener () public void onCheckedChanged (groupe RadioGroup, int vérifiéId) // TODO Stub de méthode généré automatiquement commutateur (ID vérifié) cas R.id.answer1A: numOfGoal = "1"; Pause; case R.id.answer1B: numOfGoal = "2"; Pause; cas R.id.answer1C: numOfGoal = "3"; Pause; ); Carte RadioGroup = (RadioGroup) findViewById (R.id.answer2); card.setOnCheckedChangeListener (nouveau OnCheckedChangeListener () public void onCheckedChanged (groupe RadioGroup, int vérifiéId) // TODO Stub de méthode généré automatiquement commutateur (ID vérifié) cas R.id.answer2A: numOfCard = "1"; Pause; case R.id.answer2B: numOfCard = "2"; Pause; cas R.id.answer2C: numOfCard = "3"; Pause; ); RadioGroup pos = (RadioGroup) findViewById (R.id.answer3); pos.setOnCheckedChangeListener (nouveau OnCheckedChangeListener () public void onCheckedChanged (groupe RadioGroup, int vérifiéId) // TODO Stub de méthode généré automatiquement commutateur (ID vérifié) cas R.id.answer3A: diffOfPos = "1"; Pause; cas R.id.answer3B: diffOfPos = "2"; Pause; cas R.id.answer3C: diffOfPos = "3"; Pause; ); btnAddPrediction = (bouton) findViewById (R.id.submit); btnAddPrediction.setOnClickListener (new View.OnClickListener () vide public onClick (Afficher v) // TODO Stub de méthode généré automatiquement new AddNewPrediction (). execute (numOfGoal, numOfCard, diffOfPos); ); @Passer outre Booléen public onCreateOptionsMenu (menu Menu) getMenuInflater () .flate (R.menu.activity_prediction, menu); retourne vrai; classe privée AddNewPrediction étend AsyncTask{ @Passer outre void protégé onPreExecute () super.onPreExecute (); @Passer outre protected Void doInBackground (String ... arg) // TODO Stub de méthode généré automatiquement But de la chaîneNo = arg[0]; String cardNo = arg[1]; String posDiff = arg[2]; // Préparation des paramètres de poste liste params = new ArrayList (); params.add (new BasicNameValuePair ("goalNo", goalNo)); params.add (new BasicNameValuePair ("cardNo", cardNo)); params.add (new BasicNameValuePair ("posDiff", posDiff)); ServiceHandler serviceClient = new ServiceHandler (); String json = serviceClient.makeServiceCall (URL_NEW_PREDICTION, ServiceHandler.POST, paramètres); Log.d ("Créer une demande de prédiction:", ">" + json); if (json! = null) essayer JSONObject jsonObj = new JSONObject (json); erreur booléenne = jsonObj.getBoolean ("erreur"); // recherche de noeud d'erreur dans json si (! erreur) // nouvelle catégorie créée avec succès Log.e ("Prédiction ajoutée avec succès", ">" + jsonObj.getString ("message")); autre Log.e ("Ajouter une erreur de prédiction:", ">" + jsonObj.getString ("message")); catch (JSONException e) e.printStackTrace (); autre Log.e ("Données JSON", "Erreur de données JSON!"); return null; @Passer outre void protected onPostExecute (résultat de void) super.onPostExecute (result); } }
Recevez les données du client à l'aide du script de serveur:
Je suppose que vous connaissez bien le serveur wamp ou xamp et que vous savez comment utiliser PHPMyadmin pour créer une base de données.
- Créez une base de données nommée wcdb à l'aide de PHPMyadmin.
- Créez une table nommée prediction à 3 colonnes:
- goalNum: tapez varchar.
- cardNum: tapez varchar
- posDiff: tapez varchar.
Le tableau ressemblera à ceci:
Lorsque l'utilisateur sélectionne les options et soumet; les données seront stockées dans cette table. Les données stockées seront le numéro d'option plutôt que la valeur d'option. Par exemple, si l'utilisateur sélectionne la première option pour toutes les questions, les données stockées seront 1,1,1 pour les trois colonnes, plutôt que la valeur des options sélectionnées.
Nous allons maintenant écrire 3 fichiers php pour créer des données au format JSON à partir de la table. Créez un dossier nommé tech dans votre dossier de script racine wamp ou xamp (pour moi, le répertoire est: C: wamp www) et créez 3 fichiers ici:
- Config.php
- DbConnect.php
- getFixture.php
Config.php:
Dans ce fichier, nous allons définir le nom d'utilisateur, le mot de passe, le nom d'hôte et le nom de la base de données. Comme vous utilisez actuellement localhost, définissez la valeur par défaut nom d'utilisateur, mot de passe et nom d'hôte. Définissez ensuite le nom de la base de données que vous avez créé.
Code:
DbConnect.php:
Ce fichier est requis pour établir et fermer la connexion avec votre base de données.
Code:
relier(); fonction __destruct () $ this-> close (); fonction connect () include_once dirname (__ FILE__). './Config.php'; $ this-> conn = mysql_connect (DB_HOST, DB_USERNAME, DB_PASSWORD) ou die (mysql_error ()); mysql_select_db (DB_NAME) ou die (mysql_error ()); // rétention de la ressource de connexion return $ this-> conn; // Fermer la fonction function close () // ferme la connexion à la base de données mysql_close ($ this-> conn); ?>
new_predict.php:
Ce fichier communique entre notre application et la base de données. Tout d'abord, il crée une connexion avec la base de données. Ensuite, il reçoit des données de notre application. Ensuite, il stocke les données dans les champs appropriés de la table (ici, le nom de la table est une prédiction) de la base de données (wcdb).
Code:
Capture d'écran de la sortie:
Voici des exemples de captures d'écran de la sortie de l'application.
Commentaires
Laisser un commentaire