Différences
Ci-dessous, les différences entre deux révisions de la page.
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:18] – [Préparation du travail côté serveur : création d'un service web] dthevenot | sio2:projet_depann_tout_2 [2025/02/09 18:47] (Version actuelle) – [Importation des données avec le module Volley] dthevenot | ||
---|---|---|---|
Ligne 49: | Ligne 49: | ||
- rechercher l' | - rechercher l' | ||
- accéder au navigateur du périphérique Android, et taper la même url que précédemment en remplaçant localhost par l' | - accéder au navigateur du périphérique Android, et taper la même url que précédemment en remplaçant localhost par l' | ||
+ | < | ||
+ | ===== Compléter l' | ||
+ | Afin de ne pas perdre tout le travail réalisé à cause d'une fausse manipulation, | ||
+ | L' | ||
+ | ==== Autorisations ==== | ||
+ | Il est nécessaire d' | ||
+ | < | ||
+ | <!-- Internet Permissions --> | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | À l' | ||
+ | < | ||
+ | android: | ||
+ | |||
+ | ==== Installation de la bibliothèque Volley ==== | ||
+ | |||
+ | La bibliothèque Volley facilite la gestion asynchrone des appels réseaux.https:// | ||
+ | |||
+ | Pour l' | ||
+ | < | ||
+ | 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) | ||
+ | } | ||
+ | </ | ||
+ | ==== Création d'une classe Importation ==== | ||
+ | |||
+ | Créer **une nouvelle empty view activity appelée Importation**. Ajouter un titre et un bouton Quitter. Écrire | ||
+ | |||
+ | Cette classe nous permettra de gérer le transfert de données depuis le serveur. Mettre cette classe au même niveau que les classes xxxActivity.java | ||
+ | |||
+ | Au niveau de l' | ||
+ | ==== Importation des données avec le module Volley ==== | ||
+ | Reprendre l' | ||
+ | |||
+ | Créer la méthode importer suivante : | ||
+ | (NB : remplacer adressIPServeurWeb par l' | ||
+ | < | ||
+ | // url de la requête au serveur | ||
+ | String url = " | ||
+ | RequestQueue queue = Volley.newRequestQueue(this); | ||
+ | Log.i(" | ||
+ | JSONObject jsonObject = null; // objet JSON envoyé au serveur | ||
+ | //Requête envoyée au serveur | ||
+ | JsonObjectRequest jsonObjectRequest = new JsonObjectRequest( | ||
+ | Request.Method.GET, | ||
+ | | ||
+ | | ||
+ | new Response.Listener< | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | new Response.ErrorListener() { | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ); | ||
+ | // Add the request to the RequestQueue. | ||
+ | queue.add(jsonObjectRequest); | ||
+ | Log.i(" | ||
+ | </ | ||
+ | |||
+ | **adressIPServeurWeb** est à remplacer par l' | ||
+ | |||
+ | Après envoi de la requête au serveur, 2 écouteurs sont créés, ils seront sollicités selon le succès ou l' | ||
+ | |||
+ | L' | ||
+ | |||
+ | |||
+ | |||
+ | ===== Exploitation(partielle) des données importées ===== | ||
+ | < | ||
+ | Modifier les classes métiers Client et Intervention afin de leur ajouter l' | ||
+ | |||
+ | Dans la classe Importation, | ||
+ | |||
+ | Cette méthode va récupérer le fichier json envoyé par le serveur, et recopier les données dans la collection lesClients dans un premier temps : | ||
+ | < | ||
+ | ArrayList< | ||
+ | try { | ||
+ | | ||
+ | | ||
+ | // Chaque objet JSON devient un objet de type Client, rangé dans la collection | ||
+ | for (int i = 0; i < array.length(); | ||
+ | // On récupère un objet JSON du tableau | ||
+ | | ||
+ | // On fait le lien Client - Objet JSON | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | // … | ||
+ | | ||
+ | // On ajoute unClient à la liste | ||
+ | | ||
+ | | ||
+ | } catch (JSONException e) { | ||
+ | | ||
+ | } | ||
+ | Toast.makeText(getApplicationContext(), | ||
+ | </ | ||
+ | ===== Afficher les données récupérées ===== | ||
+ | |||
+ | Afficher les données dans une listView comme la liste des articles du projet Inventaire : | ||
+ | - Ajouter une LinearLayout, | ||
+ | - Créer une Layout (ligne_client par exemple) avec une LinearLayout comprenant 3 TextView. | ||
+ | - Pour afficher les clients, on pourra utiliser la classe SimpleAdapter | ||
+ | |||
+ | Extrait du constructeur | ||
+ | (cf https:// | ||
+ | |||
+ | Les données à afficher doivent être dans une List de Maps. Il faudra donc reformater notre collection | ||
+ | < | ||
+ | ArrayList< | ||
+ | ArrayList<> | ||
+ | For (Client unClient : lesClients) { | ||
+ | HashMap< | ||
+ | hashMap.put(" | ||
+ | hashMap.put(" | ||
+ | hashMap.put(" | ||
+ | lesClientsHM.add(hashMap);// | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | < | ||
+ | ListAdapter adapter = new SimpleAdapter( | ||
+ | | ||
+ | | ||
+ | new String[] { " | ||
+ | new int[] { R.id.tvIdC, R.id.tvNomC, | ||
+ | // maj listview de activity_liste_Clients | ||
+ | ListView lvHab = (ListView) findViewById(R.id.lvHab) ; | ||
+ | lvHab.setAdapter(adapter); | ||
+ | </ | ||
+ | Les clients seront ensuite à intégrer dans la base de données SQLite s'ils n' | ||
+ | < | ||
+ | * **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' | ||
+ | * **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' | ||
+ | * **niveau 4**(20 points) : exportation des interventions sur le serveur(éventuellement nouvelles ou modifiées) | ||
+ | </ |