Vous n'êtes pas connecté. Connexion
|
|
TD 2 - Synchronisation avec un serveurDe $1Table des matièresaucun titreEtape 1 - Synchronisation avec le serveur Dans cette étape, nous allons utiliser le protocole HTTP pour envoyer les données du formulaire vers un serveur (mis à votre disposition pour ce TP). Le serveur expose un web service REST qui accetpte et renvoie des données sous format JSON. Les ressources exposées sont des personnes sur lesquelles vous pouvez effectuer les actions CRUD (Create, Read, Update, Delete). L'URI de la ressource personne est : http://95.142.161.35:8080/person/ Exemple: Pour créer un utilisateur Methode : 'POST' Content-type: 'application/json' Modèle de données à envoyer { "nom": "Edouard", "prenom" : "Amosse", "sexe": "Masculin", "telephone" : "123456789", "email" : "eamosse@gmail.com", "createdby" : "Amosse", "password" : "1234" } Modèle de réponse retournée par le serveur
Vous allez modifier l'activity EnregistrerActivity pour envoyer les données du formulaire vers le serveur. Ajoutez une classe interne dans l'activity qui hérite de AsyncTask. AsyncTask est une classe générique proposée par le SDK vous permettant d'effectuer des requetes HTTP de manière assynchrone. Ceci nous permet de ne pas bloquer le thread principal de l'application au moment déeffectuer la requete HTTP.
class RegisterTask extends AsyncTask<Person,Void,Person>{ Dans cette classe vous avez trois méthodes: doInBackground : est déstinée à effectuer des actions en tache de fond. Cette methode crée automatiquement un autre thread et il n'est pas possible de modifier l'interface de l'application dans cette methode car les elements de l'interface sont gérés par le thread principale d'Android (la UIThread). onPreExecute: Vous permet d'effectuer des actions avant de passer la main à la méthode doInBackground. Vous pouvez par exemple afficher un loading, invitant l'utilisateur à patienter. onPostExecute: Cette méthode est appeleé à la fin de l'execution de la méthode doInBacground, vous indiquant que la fin de l'execution des méthodes doInBackground. Vous pouvez enlever le loading à ce moment là, et mettre à jour l'interface si besoin est. Cette classe accepte aussi un ensemble de paramère lui permettant de communiquer avec l'activité appelante ou d'echanger des informations avec les méthodes. Le premier représente les paramètres qui seront passés à la méthode doInBackground, ces paramètres sont passés comme étant un tableau (remarquez les ... après Void dans doInBackground, en Java ils modélisent un tableau de dimension inconnue). Le deuxième représente un progressbar si on veut afficher l'état d'avancement de la tache asynchrone (par exemple le pourcentage d'un téléchargement) et le troisième est le type de retour de la méthode doInBackground ainsi que le paramaètre de la méthode onPostExecute. Ici nous avons utilisé Void, vous pouvez au besoin les changer si vous sentez le besoin. Modifiez la méthode doInBacground pour effectuer une requete HTTP vers le serveur. Complétez la méthode et importez les packages qu'il faut. try{ Vous pouvez modifier la méthode onPreExecute pour afficher un loading en attendant l'envoi des données au serveur. Ajoutez une méthode showProgressDialog pour afficher un loading. ProgressDialog progressDialog; Appelez la méthode showProgressDialog dans onPreExecute de la classe AsyncTask. @Override Enlevez le loading dans la méthode onPostExecute. Traitez la réponse qui est un json et afficher si oui ou non l'utilisateur est inscrit. @Override Dans l'action onClick du bouton enregistrer, appelez la classe que vous venez de créer et qui fait la requete asynchrone. @Override Etape 3 - Connexion Inspirez vous de l'étape 2 pour permettre à un utilisateur de se connecter sur le serveur. URL : http://95.142.161.35:8080/person/login Content-Type : application/json Accept : application/json Methode : POST Données à envoyer: { "email" : "eamosse@gmail.com", "password" : "1234" } Modèle de réponse en cas d'erreur { "success" : false, "message" : "Nom d'utilisateur ou mot de passe incorrecte" } Modèle de réponse en cas de succès { "success": true, "user": { "nom": "Edouard", "prenom": "Amosse", "sexe": "Masculin", "telephone": "123456789", "email": "eamosse@gmail.com", "createdby": "Amosse", "password": "1234", "connected": true, "createdAt": "2014-10-15T20:27:09.998Z", "updatedAt": "2014-10-15T20:27:09.998Z", "id": "543ed89ed9573e6e76a02490" } } Je suis sure qu'il existe des librairies qui permettent de faire plus simple non :)
Et comme vous etes super intelligent, votre travail consiste à modifier l'application pour utiliser Gson pour traiter les Json et Android Query pour traiter les requetes asynchrones. Ca va nous aider pour la suite.
|
Powered by MindTouch Deki Open Source Edition v.8.08 |