Communication entre Android et Mysql : Affichage de données à partir d'une base Mysql dans un ListView Android via Json et PHP

Android mysql json php
Dans les vidéos suivantes vous allez trouver une explication très détaillée pour effectuer ce travail, sinon si vous ne voulez pas suivre les vidéos vous pouvez suivre le code qui existe dans le tutoriel en dessous des vidéos. Sachant que les deux (tutoriel et vidéos) sont complémentaires :




Création de la base Mysql

Le tutoriel précédent était consacré pour créer un web service et un code android pour apprendre à ajouter un enregistrement dans la base, ce tutoriel est la suite du tutoriel précédent : https://houssem-lahiani.blogspot.com/2016/04/android-et-les-bases-de-donnees.html

Tout d'abord nous devons avoir :

un logiciel qui contient un serveur web apache et un SGBD mysql. Parmi ces applications on trouve XAMPP, WAMP ou EasyPHP. Ou vous pouvez tout simplement utiliser un serveur distant.
La première étape consiste à créer sa base de données. On suppose que notre base de données s'appelle usermanager.
Cette base va contenir une table   qui s'appelle user : 

--
-- Structure de la table `user`
--

CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `name` varchar(30) NOT NULL,
  `age` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Création de la partie serveur (web service php sous Apache)

par la suite nous devons créer un web services de type REST . Ce web service se fait à base de php et sera héberger dans un serveur web apache. Le résultat de ce web service  doit être sous format json.
Tout d'abord nous devons créer un fichier php qui permet de se connecter au serveur de la base de données et pour sélectionner la base qui contient notre table. Ce fichier sera par la suite invoqué par notre web service par la suite.

Ce fichier s'appelle db_connect.php


Il reste maintenant de développer notre web service, on l'appelle all.php

Les permissions dans le fichier AndroidManifest.xml

On va passer maintenant pour développer notre application android. Tout d'abord il faut ajouter la permision internet dans notre fichier androidManifest.xml.
<uses-permission android:name="android.permission.INTERNET" />

Création de l'interface graphique layout:

Vient maintenant le temps pour créer notre interface graphique. On l'appelle activity_list_user.xml.


On doit créer maintenant un fichier xml à partir duquel on personnalise les items de notre ListView. on l'appelle item.xml.

La partie Java

On passe maintenant à la partie java. Tout d'abord nous devons créer une classe dans laquelle nous créons une méthode permettant de communiquer avec notre web service.
On l'appelle JSONParser.java
Il reste maintenant de créer notre Activité, on l'appelle ListUser.java  

Commentaires

  1. Bonjour, j'ai effectué le tuto mais quand j'essaye de me connecter l'application de l'emulateur bug, j'ai adapté le script pour la table dans laquelle je dois recuperer mes données mais ça ne fonctionne pas, mentionnez vous quelque part le nom de la base " culture " ? car je ne le vois nul part, merci de votre réponse

    RépondreSupprimer
  2. Bonjour oui , dans le fichier connexion.php il faut faire :
    $db_select=mysql_select_db("culture");
    et non pas $db_select=mysql_select_db("plante");

    RépondreSupprimer
    Réponses
    1. Malgres cette modification, je n'arrive toujours pas à afficher les données de la table, l'application coupe à coup sur

      Supprimer
    2. Le fichier ZIP est disponible ici https://github.com/HoussemLahiani/JSONParser

      Essayes de tester le web service avec le navigateur pour savoir s'il affiche les données correctement ou pas. Si tu utilise EasyPHP ou WAMP et que tu teste avec l'emualteur donc il faut utiliser http://10.0.2.2 au lieu de http://localhost

      Supprimer
    3. effectivement j'arrive à afficher les données en passant par le navigateur , et je viens de remplacer l'adresse par 10.0.2.2 mais ça ne résoud pas le probleme sur l'emulateur android studio, je cherche mais je ne trouve pas où ça coince car mon application se lance sans aucune erreur

      Supprimer
  3. Bonjour , merci beaucoup pour vos tuto qui m'ont enormement aidé .
    j'aimerai savoir si JSONParser.Java est le meme que dans vos autres tuto comme celui là :
    "http://houssem-lahiani.blogspot.com/2016/04/android-et-les-bases-de-donnees.html"
    je vois qu'il y a un peu de différence entre les deux fichiers mais j'aimerai savoir si je peux utilisé le JSONParser.Java du tutoriel que je viens de cité dans celui là sans rien changer ou bien je dois créer un autre (avec un nom different) et y mettre le code de ce tutoriel .
    merci et bonne journée

    RépondreSupprimer
    Réponses
    1. la classe JSONParser.java contient la méthode makeHttpRequest() qui permet de retourner le résultat fournit par le web service.
      Dans les deux tutoriels elle a le même but. Sauf que dans l'article "Android et les bases de données externes..." le code de cette classe contient des APIs qui ne sont plus reconnues (HttpClient par exemple) par les nouvelles versions d'android.

      Supprimer
  4. Bonjour, merci pour votre tutoriel . Je l'ai testé mais le problème est que rien ne s'affiche sur ma listview par contre dans mon LogCat je récupère le tableau avec succès donc j'ignore ce qui ne va pas. Pouvez-vous svp m'aider?

    RépondreSupprimer
    Réponses
    1. Essayes de voir ce que tu as mis dans les tags (TAG_PID,TAG_NAME...) ,sont il vraiment des chaines de caractères affichés par le résultat JSON?

      Supprimer
    2. Oui ce sont des chaines de caractères. J'ai pu afficher mais le problème maintenant est que juste la 1re ligne s'affiche pourtant il y en a plus d'une dans ma table. Si je peux vous joindre autrement afin que je vous montre mon code, ce sera plus explicite, qu'en pensez-vous?

      Supprimer
    3. Essayes de déclarer le HashMap à l'extérieur du boucle For, puis au niveau du boucle essayes d'instancier cet HashMap. Cemme ceci :
      HashMap map;
      // looping through All Products
      for (int i = 0; i < products.length(); i++) {
      JSONObject c = products.getJSONObject(i);

      // Storing each json item in variable
      String id = c.getString(TAG_PID);
      String name = c.getString(TAG_NAME);
      String nature=c.getString(TAG_NATURE);

      // creating new HashMap
      map = new HashMap();
      map.put(TAG_PID, id);
      map.put(TAG_NAME, name);
      map.put(TAG_NATURE,nature);

      Supprimer
    4. Cette fois, même la seule ligne qui s'affichait n'apparait plus.

      Supprimer
  5. Bjr,
    Merci bcp pour ce tuto. Par contre, lorsque j'essaye de lancer l'appli, il met : L’application json s'est malheureusement arrêtée. Pouvez vous me dire pq ?

    RépondreSupprimer
    Réponses
    1. Le code source et disponible ici : Le code du tutoriel est disponible ici : https://github.com/HoussemLahiani/JSONParser

      Essayes d'importer le projet et change l' URL par l'adresse vers ton propre web service. Le web service doit être fonctionnel sinon l'application fait crash.

      Supprimer
  6. Bonjour, J'ai deja utiliser presque tout vos tutoriels et ca marche pour moi bien , mais j'ai un souci du fait que je vais tester si il y a la connection internet avant que l'appel du chargement de la listView soit effectue, car quand on a pas internet l'pplication cesse de fonctionner, j'ai trouver un code qui verifie si on est connecter sur WIFI ou DONNE MOBILE EST ACTIVE mais ca suffit pas car on peut se connecter par wifi mais on a pas access a internet, Veuillez M'aider s'il vous suis vraiment bloquer mon Formateur

    RépondreSupprimer
    Réponses
    1. Bonjour, dans ce cas là il faut mieux utiliser un Broadcast Receiver pour tester la connectivité comme expliquer ici : https://stackoverflow.com/questions/15698790/broadcast-receiver-for-checking-internet-connection-in-android-app

      Supprimer
  7. Bonjour et merci deja pour le travail que vous faites.
    J'ai adapte ceci a mon code qui prend toujours trois paramatres (title, date et content) tous des string. Mais a la compilation je vois bien la reponse dans la console mais l'application demarre et s'arrete directement sans afficher.

    Voici l'erreur qui s'affiche dans la console:
    {"title":"hfjkgdd","date":"2020-11-23","content":"ngth"},{"title":"lgdfbb","date":"2020-11-23","content":"kgdjn\ngjbhb."}],"success":1}
    E/JSON Parser: Error parsing data org.json.JSONException: Value Connect of type java.lang.String cannot be converted to JSONObject
    ...
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int org.json.JSONObject.getInt(java.lang.String)' on a null object reference
    at com.frantzjordan.gestionnairedestickets.controller.MainActivity$All.doInBackground(MainActivity.java:128)

    Voila la ligne 128 du MainActivity.java:
    success=object.getInt("success");

    J'espere que vous comprendrez bien cette erreur car c'est votre meme code. Merci deja pour votre reponse.

    RépondreSupprimer
    Réponses
    1. L'app reçoit le résultat du web service d'après le logcat maisl il faut vérifier ce que tu as mis dans object car d'après el message d'erreur object est null et ne contient rien c'est pour cette raison qu'on ne pas appeler getInt() sur un objet null

      Supprimer
  8. Bsr Mr Houssem. Vous avez été pour plus qu'un enseignant dans la conception et développement des applications mobiles. Vos enseignements m'ont permis de réaliser plusieurs applications et de maîtriser Android studio. Je vous dis grand merci.
    Cependant j'ai une préoccupation. Avec votre methode, comment dois créer une application avec la fonctionnalité de <> les éléments contenus dans une base de données msql. Là je pense au bouton rechercher en utilisant la bdd mysql. Je vous ai suivi sur un tutoriel avec cette option mais en utilisant sqlite. Je suis débutant, mais je voudrais maîtriser cette fonctionnalité. Votre apport comblera mes zones d'ombre

    RépondreSupprimer
    Réponses
    1. Bonsoir, Si je comprends bien tu veut réaliser ton projet en utilisant le modèle MVC et un adaptateur spécifique pour la ListView. Tu fais la même chose qui existe dans le tutoriel de la base de données interne (une classe qui représente le modèle qui contient des variables de classe identiques aux colonnes de la table de base de données et avec des getters et setters), puis tu crée un adaptateur spécifique de la même manière. Dans l'activité et au niveau de l'asyncTask au lieu de créer un HashMap tu dois créer un objet de même type que ta classe modèle et qui doit être insérer dans une ArrayList. Cet ArrayList doit etre fournir par la suite à ton Custom adapter au lieu du SimpleAdapter

      Supprimer
    2. Merci pour votre réaction. Vous m'avez bien compris. Je vais m'exercer encore en application de cette orientation. Je vous reviens bientôt

      Supprimer
    3. La vidéo suivante montre et explique comment créer une ListView avec CustomAdapter en utilisant le modèle MVC :https://www.youtube.com/watch?v=XdRItWsoxzk

      Supprimer

Enregistrer un commentaire

Your comment will be reviewed by moderators

Posts les plus consultés de ce blog

Ionic 2 : Envoie d'une image vers un serveur web à l'aide de PHP et Angular 2

Premier tutoriel avec Arduino et Proteus ISIS

Login et password ,formulaire d'authentification sous android avec mysql et json