sio2:projet_depann_tout_2

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
sio2:projet_depann_tout_2 [2025/01/12 19:30] – [Préparation du travail côté serveur : création d'un service web] dthevenotsio2:projet_depann_tout_2 [2025/02/09 18:47] (Version actuelle) – [Importation des données avec le module Volley] dthevenot
Ligne 54: Ligne 54:
 Afin de ne pas perdre tout le travail réalisé à cause d'une fausse manipulation, dupliquer  l'application. Afin de ne pas perdre tout le travail réalisé à cause d'une fausse manipulation, dupliquer  l'application.
  
 +L'auto-entrepreneur va (en cliquant sur un bouton) importer automatiquement les rdv du jour en provenance du serveur. Cette importation va automatiquement mettre à jour les clients (si il y a des rdv avec de nouveaux clients) et les interventions (avec les rdv pris).
 ==== Autorisations ==== ==== Autorisations ====
 Il est nécessaire d'autoriser l'application à accéder à Internet, pour cela, ajouter les lignes suivantes au niveau du fichier **manifests/AndroidManifest.xml**, avant la balise </manifest> Il est nécessaire d'autoriser l'application à accéder à Internet, pour cela, ajouter les lignes suivantes au niveau du fichier **manifests/AndroidManifest.xml**, avant la balise </manifest>
Ligne 68: Ligne 69:
 ==== Installation de la bibliothèque Volley ==== ==== Installation de la bibliothèque Volley ====
    
-La bibliothèque Volley facilite la gestion asynchrone des appels réseaux.+La bibliothèque Volley facilite la gestion asynchrone des appels réseaux.https://google.github.io/volley/
    
 Pour l'intégrer au projet, il faut modifier le fichier **build.gradle.kts (module app)**. Il faut ajouter la  ligne suivante dans les dépendances : **implementation(libs.volley)**  Pour l'intégrer au projet, il faut modifier le fichier **build.gradle.kts (module app)**. Il faut ajouter la  ligne suivante dans les dépendances : **implementation(libs.volley)** 
- + <code> 
 +dependencies { 
 + 
 +    implementation(libs.appcompat) 
 +    implementation(libs.material) 
 +    implementation(libs.activity) 
 +    implementation(libs.constraintlayout) 
 +    testImplementation(libs.junit) 
 +    androidTestImplementation(libs.ext.junit) 
 +    androidTestImplementation(libs.espresso.core) 
 +    implementation(libs.volley) 
 +
 +</code>
 ==== Création d'une classe Importation ==== ==== Création d'une classe Importation ====
    
Ligne 86: Ligne 99:
 <code> <code>
 // url de la requête au serveur  // url de la requête au serveur 
-String url = "http://adressIPServeurWeb/ ReparTout/getLesRendezVous.php"; RequestQueue queue = Volley.newRequestQueue(this); +String url = "http://adressIPServeurWeb/ReparTout/getLesRendezVous.php";  
 +RequestQueue queue = Volley.newRequestQueue(this); 
 Log.i("volley-requete","volley1 ok");  Log.i("volley-requete","volley1 ok"); 
 JSONObject jsonObject = null; // objet JSON envoyé au serveur  JSONObject jsonObject = null; // objet JSON envoyé au serveur 
Ligne 112: Ligne 126:
 Log.i("volley-requete","fin ok");  Log.i("volley-requete","fin ok"); 
 </code> </code>
 +
 +**adressIPServeurWeb** est à remplacer par l'adresse IP **10.0.2.2** car le périphérique de l'émulateur Android n'interprète pas le localhost de la machine hôte. 10.0.2.2 est un alias pour accéder à l’hôte local de votre ordinateur à partir d’un émulateur Android.
 +
 Après envoi de la requête au serveur, 2 écouteurs sont créés, ils seront sollicités selon le succès ou l'échec de la requête.  Après envoi de la requête au serveur, 2 écouteurs sont créés, ils seront sollicités selon le succès ou l'échec de la requête. 
  
 L'objet RequestQueue gère la file d'attente des requêtes.  L'objet RequestQueue gère la file d'attente des requêtes. 
  
-===== Exploitation des données importées ===== + 
- + 
 +===== Exploitation(partielle) des données importées ===== 
 +<bootnote>l'exploitation ici ne concerne que les données des clients</bootnote> 
 Modifier les classes métiers Client et Intervention afin de leur ajouter l'attribut idDistant, qui  représente l'id au niveau de la base de données venant du serveur. Modifier les classes métiers Client et Intervention afin de leur ajouter l'attribut idDistant, qui  représente l'id au niveau de la base de données venant du serveur.
    
Ligne 126: Ligne 145:
 ArrayList<Client> lesClients = new ArrayList<Client>();  ArrayList<Client> lesClients = new ArrayList<Client>(); 
 try {  try { 
- JSONArray array = new   + JSONArray array = new JSONArray(jsonObject.getString("lesRendezVous")); 
-JSONArray(jsonObject.getString("lesRendezVous")); +
  Log.i("httphab", "taille du tableau " + array.length());   Log.i("httphab", "taille du tableau " + array.length()); 
  // Chaque objet JSON devient un objet de type Client, rangé dans  la collection   // Chaque objet JSON devient un objet de type Client, rangé dans  la collection 
Ligne 152: Ligne 170:
    
 Afficher les données dans une listView comme la liste des articles du projet Inventaire :   Afficher les données dans une listView comme la liste des articles du projet Inventaire :  
-• Ajouter une LinearLayout, avec 3 TextView pour les intitulés de colonnes (id, nom et  prénom), puis ajouter une ListView pour la liste des clients.  +  - Ajouter une LinearLayout, avec 3 TextView pour les intitulés de colonnes (id, nom et  prénom), puis ajouter une ListView pour la liste des clients.  
-• Créer une Layout (ligne_client par exemple) avec une LinearLayout comprenant 3  TextView.  +  Créer une Layout (ligne_client par exemple) avec une LinearLayout comprenant 3  TextView.  
-Pour afficher les clients, on pourra utiliser la classe SimpleAdapter+  Pour afficher les clients, on pourra utiliser la classe SimpleAdapter
        
 Extrait du constructeur   Extrait du constructeur  
 (cf https://developer.android.com/reference/android/widget/SimpleAdapter.html )  (cf https://developer.android.com/reference/android/widget/SimpleAdapter.html ) 
-Les données à afficher doivent être dans une List de Maps. Il faudra donc reformater notre collection  lesClientss + 
 +Les données à afficher doivent être dans une List de Maps. Il faudra donc reformater notre collection  lesClients  
 +<code>
 ArrayList<HashMap<String,String>> lesClientsHM = new   ArrayList<HashMap<String,String>> lesClientsHM = new  
 ArrayList<>();  ArrayList<>(); 
 For (Client unClient : lesClients) {  For (Client unClient : lesClients) { 
-HashMap<String,String> hashMap=new HashMap<>();//creation  d'une map  +  HashMap<String,String> hashMap=new HashMap<>();//creation  d'une map  
-hashMap.put("id",Integer.toString(unClient.getId()));  +  hashMap.put("id",Integer.toString(unClient.getId()));  
-hashMap.put("nom",unClient.getNom());  +  hashMap.put("nom",unClient.getNom());  
-hashMap.put("prenom",unClient.getPrenom());  +  hashMap.put("prenom",unClient.getPrenom());  
-lesClientsHM.add(hashMap);//ajout dans la collection +  lesClientsHM.add(hashMap);//ajout dans la collection 
 } }
 +</code>
  
 L'affichage se fera ensuite ainsi :  L'affichage se fera ensuite ainsi : 
 +<code>
 ListAdapter adapter = new SimpleAdapter(  ListAdapter adapter = new SimpleAdapter( 
- ListeClientsActivity.this, lesClientsHM,  +   ListeClientsActivity.this, lesClientsHM,  
- R.layout.ligne_Client, //  +   R.layout.ligne_Client, //  
- new String[] { "id", "nom" , "prenom"},  +   new String[] { "id", "nom" , "prenom"},  
- new int[] { R.id.tvIdC, R.id.tvNomC, R.id.tvPrenomC }); +   new int[] { R.id.tvIdC, R.id.tvNomC, R.id.tvPrenomC }); 
 // maj listview de activity_liste_Clients  // maj listview de activity_liste_Clients 
 ListView lvHab = (ListView) findViewById(R.id.lvHab) ;  ListView lvHab = (ListView) findViewById(R.id.lvHab) ; 
-lvHab.setAdapter(adapter); +lvHab.setAdapter(adapter); 
 +</code> 
 Les clients seront ensuite à intégrer dans la base de données SQLite s'ils n'existaient pas déjà. Ajouter le même traitement pour les interventions. Les clients seront ensuite à intégrer dans la base de données SQLite s'ils n'existaient pas déjà. Ajouter le même traitement pour les interventions.
 +<badge>Fonctionnalités à développer, à montrer et projet à déposer sur gitea(commit à chaque niveau qui fonctionne) : 
 +  * **niveau 1**(5 points) : affichage des clients concernés par les rdv du jour 
 +  * **niveau 2**(10 points) : mise à jour des clients dans la base de données côté client(android) - contrôle avec l'affichage des clients 
 +  * **niveau 3**(15 points) : traitement des rdv avec mise à jour des interventions dans la base de données côté client(android) - contrôle avec l'affichage des interventions 
 +  * **niveau 4**(20 points) : exportation des interventions sur le serveur(éventuellement nouvelles ou modifiées) 
 +</badge>
  • sio2/projet_depann_tout_2.1736706601.txt.gz
  • Dernière modification : 2025/01/12 19:30
  • de dthevenot