Cas EDF : Développement Android - Concepts avancés Partie 5



Documents pareils
Projet Viticulture - TP 3 : bases de données distantes BTS Services informatiques aux organisations

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Tutorial pour une application simple

Asset Management Software Client Module. Manuel d utilisation

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

TP2 : Client d une BDD SqlServer

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Introduction à Eclipse

1. Base de données SQLite

progecad NLM Guide de l'utilisateur

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

Edutab. gestion centralisée de tablettes Android

La base de données XML exist. A. Belaïd

2010 Ing. Punzenberger COPA-DATA GmbH. Tous droits réservés.

MANUEL WORDPRESS. Objectif: Refonte d un site web sous Wordpress I PRE-REQUIS: 1 / Créer un backup (sauvegarde) du site:

Accès externe aux ressources du serveur pédagogique

HP Data Protector Express Software - Tutoriel 4. Utilisation de Quick Access Control (Windows uniquement)

TecLocal 4.0. Nouveautés de la version 4.0 (notes de mise à jour)

Préconisations Techniques & Installation de Gestimum ERP

Stockage du fichier dans une table mysql:

CommandCenter Génération 4

Modélisation et Gestion des bases de données avec mysql workbench

GESTION DES BONS DE COMMANDE

Description de l implantation dans le centre d examen (nom du service ou de l outil et caractéristiques techniques)

Conception d'un système d'information WEB avec UML Par Ass SERGE KIKOBYA

Installation / configuration des applications PreInscription et Inscription Web Ajax

Déploiement d'une application Visual Studio Lightswitch dans Windows Azure.

Guide de l'utilisateur Sybase Mobile Sales for SAP CRM 1.0

Keyyo Unify Application de téléphonie intégrée pour Salesforce

Seafile, pour simplifier l'accès à ses fichiers, les partager et les synchroniser

Installation et paramétrage. Accès aux modèles, autotextes et clip- art partagés

SPECIFICATIONS TECHNIQUES : Gestion des Médicaments et des commandes de médicaments

Guide de l exportation postale en ligne Objets interdits et admis conditionnellement

Téléphoner depuis le PC Vue d'ensemble

REALISER UN SITE INTERNET AVEC IZISPOT SOMMAIRE

1.3 Gestion d'une application

Gestion d'un parc informatique avec OCS INVENTORY et GLPI

Manuel du logiciel PrestaTest.

TP1 : Initiation à Java et Eclipse

Manuel d'utilisation d'apimail V3

Installation d'une galerie photos Piwigo sous Microsoft Windows.

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Installation et prise en main

Comment bien démarrer avec. NetAirClub GUIDE ADMINISTRATEUR V1.5. Table des matières

FileZilla. Sauvegarder son site Guppy à l aide de. Sommaire:

DECOUVERTE DE LA MESSAGERIE GMAIL

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

Service client LSC 1

Modules Prestashop - ExportCatalogue / EXPORT IMPORT POUR MODIFICATIONS EN MASSE DANS PRESTASHOP VERSION Optim'Informatique

Business Talk IP Centrex. guide. web utilisateur. pour. les services standards

Capture Pro Software. Démarrage. A-61640_fr

Sommaire Introduction... 3 Le but du projet... 3 Les moyens utilisés... 3 Informations sur le client FTP... 4 Pourquoi une version Linux et

Android 4 Les fondamentaux du développement d'applications Java

GUIDE D INSTALLATION RAPIDE DEXH264

Quick Start Installation de MDweb version 2.3

Tutorial et Guide TeamViewer

CONNECTEUR PRESTASHOP VTIGER CRM

Guide d'utilisation du Serveur USB

Rapports d activités et financiers par Internet. Manuel Utilisateur

TP SIN Programmation sur androïde Support : eclipse

Guide de l'utilisateur

Guide Utilisateur - Guide général d'utilisation du service via Zdesktop ou Webmail v.8. Powered by. Version EXOCA 1

Préparation à l installation d Active Directory

BADPLUS V5 MANUEL D'UTILISATION. Imports de données joueurs à partir de la base fédérale en ligne Poona. Stéphan KIEFFER - Dominique BOSSERT

GUIDE DE DÉMARRAGE RAPIDE

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

La magie de SVN. Découverte & usage du logiciel

LES ACCES ODBC AVEC LE SYSTEME SAS

BIRT (Business Intelligence and Reporting Tools)

Le stockage local de données en HTML5

TeamViewer 7 Manuel Manager

Trier les ventes (sales order) avec Vtiger CRM

Business Sharepoint Contenu

Alcatel OmniPCX Office

La sauvegarde (backup) de votre comptabilité a pour but de vous permettre de retrouver vos données si un incident est survenu.

Logiciels concernés. Situation. Ciel et le pont comptable. Note conçue et rédigée par Jalons sprl tous droits réservés - 27/06/2007.

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

STATISTICA Version 12 : Instructions d'installation

Tutoriel Team-Space. by DSwiss AG, Zurich, Switzerland V

JOnAS Day 5.1. Outils de développements

Installation et configuration du logiciel BauBit

Stellar Phoenix Outlook PST Repair - Technical 5.0 Guide d'installation

Date de diffusion : Rédigé par : Version : Mars 2008 APEM 1.4. Sig-Artisanat : Guide de l'utilisateur 2 / 24

L accès à distance du serveur

LISTES DE DISTRIBUTION GÉRÉES PAR SYMPA DOCUMENT EXPLICATIF DE L'INTERFACE WEB À L'INTENTION DES ABONNÉS

INTRODUCTION AUX TESTS DE PERFORMANCE ET DE CHARGE

1. Installation du Module

Symantec Backup Exec 12.5 for Windows Servers. Guide d'installation rapide

Windows Internet Name Service (WINS)

Le générateur d'activités

inviu routes Installation et création d'un ENAiKOON ID

But de cette présentation

Un serveur web, difficile?

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Manuel d utilisation de la plate-forme de gestion de parc UCOPIA. La mobilité à la hauteur des exigences professionnelles

SOLUTION D ENVOI DE SMS POUR PROFESSIONNELS

Compte-rendu de projet de Système de gestion de base de données

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Configuration de SQL server 2005 pour la réplication

Transcription:

Cas EDF : Développement Android - Concepts avancés Partie 5 Cette publication comporte cinq parties dont l ordre est dicté par la logique du développement. Les parties 2 et 3 sont facultatives. Partie 1 : Gestion des clients Partie 2 : Géolocalisation de l'agent et géocodage du client sélectionné Partie 3 : Signature Client Partie 4 : Communication avec le serveur Ø Partie 5 : Identification, import et export des données. Description du thème Propriétés Description Intitulé long Formation concernée Matière SLAM 4 Présentation Notions Transversalité Pré-requis Outils Mots-clés Durée Auteur Cas EDF : Développement Androïd - Concepts avancés - Partie 5 : Identification, import et export des données BTS Services Informatiques aux Organisations Développement permettant d'aborder des concepts de la programmation Android d'une application embarquée, communiquant avec un serveur. Il aborde les notions : Ø d'affichage de liste / d'adapter, Ø de GEOLOCALISATION / GEOCODER, Ø de graphisme (canvas) et d'encodage JPG, Ø d'échange avec un serveur WEB (THREAD / JSON / GSON), Ø d'utilisation d'un SGBDO DB4o. Savoirs D4.1 - Conception et réalisation d une solution applicative D4.2 - Maintenance d une solution applicative Savoir-faire Programmer un composant logiciel Exploiter une bibliothèque de composants Adapter un composant logiciel Valider et documenter un composant logiciel Programmer au sein d un framework SLAM5 Version v 1.0 Date de publication Juin 2014 Développement d'une application Android sous un environnement Eclipse. (Exemple : Cas AMAP Jean-Philippe PUJOL) Eclipse, DB4o, OME, Gson, Google play services, Apache, Mysql Application mobile, Android, SGBDO, DB4o, Géolocalisation, Géocodage, Thread, json, Gson, MVC, canvas, encodage JPG 24 heures (8,4,4,4,4) (Temps divisé par 2 si utilisation du squelette application) Pierre François ROMEUF avec la relecture et les judicieux conseils de l'équipe CERTA http://www.reseaucerta.org CERTA - juin 2014 v1.0 Page 1/7

Contexte Application embarquée sur une solution technique d accès (STA) sous Android, permettant à un agent EDF d'effectuer sa tournée journalière de relevés des compteurs EDF. Les principales fonctionnalités sont : Ø Identification de l'agent sur le device avec contrôle sur un serveur web, Ø Import des clients depuis un serveur web, Ø Affichage des clients, Ø Saisie des informations clients, Ø Aide au déplacement via géolocalisation de la position de l'agent EDF et géocodage de l'adresse client, Ø Enregistrement de la signature client validant les informations saisies, Ø Export des données sur le serveur web. Le SGBD embarqué est un SGBDO DB4o. Le serveur distant est un serveur de type LAMP installé sur la ferme de serveurs ou via un hébergement gratuit (ex : http://www.hostinger.fr/) Cette application peut être dérivée pour de multiples besoins : ceux des livreurs, des commerciaux, des visiteurs, des contrôleurs... Le code fourni en annexe nécessite de votre part une compréhension. Il représente normalement votre travail de programmeur, de fouille sur internet, avec tests, compréhension et modifications du code. Il vous est fourni afin que ce développement ne représente qu'un travail raisonnable et pour vous présenter les différentes facettes du développement sur Android. Conseils : consultez notamment developer.android.com, le tutoriel du zéro (http://uploads.siteduzero.com/pdf/554364-creez-des-applications-pour-android.pdf), etc. http://www.reseaucerta.org CERTA - juin 2014 v1.0 Page 2/7

Identification, Import, Export Vous avez maintenant, avec la partie 4, toutes les connaissances pour terminer ce cas. Pour les Activity Actimport et Actexport, nous allons utiliser GSON qui est une bibliothèque permettant de gérer les parsing JSON sous Android d'une manière robuste et facile. Ø Importez dans le dossier libs, gson-2.2.4.jar (https://code.google.com/p/google-gson/downloads/list ) Ø Ajoutez le.jar à votre projet via Add JARs dans le Java BuildPath onglet libraries. Règles de gestion : Au démarrage du projet aucun agent EDF n'est identifié sur le STA, donc seule l'image "Identification" du menu est accessible Suite à une identification réussie, l'enregistrement des informations de l'agent EDF détenteur du STA est stocké dans la base DB4o. Ces informations seront utiles par la suite pour les activity Import et Export. Si un agent EDF est déjà identifié (présence d'un enregistrement AgentEdf dans la base de donnée DB4o), le clic sur l'image "identification" dans le menu provoquera l'affichage d'un message d'avertissement indiquant la présence d'information concernant l'agent EDF détenteur du STA et demandant la confirmation de l'écrasement de ces informations. En effet le STA peut être donné à un autre agent EDF, où l'identifiant et le mot de passe de l'agent EDF détenteur du STA ont pu être modifiées. Suite à une identification correcte, s'il n'y a pas la présence d'informations concernant les clients dans la base DB4o, seule l'image "import" du menu devient accessible. Après un import réussi des clients à visiter, les images "Relevé des compteurs" et "Sauvegarde" deviennent accessibles. Après un export (sauvegarde) réussi des données clients sur le serveur, les informations de la base DB4o concernant les clients sont effacées. Seules restent donc accessibles les images "Identification" et "Import" Ø Créez une méthode dans la MainActivity controleaffichage() à A partir de Modele, appel des méthodes qui permettent de récupérer la List<Client> et la List<AgentEdf> Les informations de ces 2 listes vous permettront de rendre accessibles ou non les images du menu..setenabled(false); ou.setenabled(true); Identification Pour simplifier, nous considérerons que seul un agent EDF unique à un instant t peut utiliser le STA. Ø Créez une classe AgentEdf dans votre projet avec comme données identifiant, motdepasse. Ø Générer les getter et setter Ø Créez dans Modele les méthodes utiles permettant de stocker et modifier l'enregistrement unique. Ø Modifiez sur le serveur, le fichier connect.php, afin que sur réception de l'identifiant et du mot de passe de l'agent EDF, il renvoie 1 si l'agent est identifié, 0 sinon. Layout de l'activity Identification Ø Modifiez le Layout de l'activity Identification en ajoutant 2 EditText permettant de saisir l'identifiant et le mot de passe. Ø Modifiez le label du bouton "testcon" du layout de l'activity Identification Ø Ajoutez un bouton "cancel" On rajoutera exceptionnellement (si Wamp ou Lamp) un EditText pour l'adresse du serveur 192.168.xxx.xxx qui n'est pas utile pour l'application normale. Code : Ø Ajoutez une méthode testpresenceagent() qui vérifiera la présence d'un enregistrement AgentEdf dans la base DB4o Si un agent est déjà identifié, un message d'avertissement "Un agent est déjà identifié, voulez vous écraser ces informations?" sera affiché via un AlertDialog.Builder (bouton ok et cancel). http://www.reseaucerta.org CERTA - juin 2014 v1.0 Page 3/7

La gestion du clic sur cancel de la boite de dialogue provoquera le retour à la MainActivity avec l'information 'cancel' Ø Modifiez le code de la méthode retouridentification pour gérer le retour de connect.php Si l'identification est réussie, écriture ou modification des informations de l'agent EDF et retour à la MainActivity en lui indiquant que l'identification est réussie. Si l'identification échoue affichage d'un message indiquant que le mot de passe ou l'identifiant sont erronés. La gestion du clic sur cancel provoquera le retour à la MainActivity avec l'information 'cancel'. Communication avec la MainActivity On associera, à la fin de l'activity Identification (il en sera de même pour les activities Export et Import), un retour vers la MainActivity avec une communication de l'information de réussite ou d'échec de l'opération. Comment communiquer cette information à l'activity appelante (ici la MainActivity)? La communication avec la MainActivity se fera via un startactivityforresult. Idem pour import et export dans la MainActivity qui permet de démarrer une activity et de pouvoir récupérer un résultat. Ø Déclarez dans la MainActivity 3 variable entières permettant de reconnaitre l'activity qui provoque le retour static final int coderetouridentification = 1; static final int coderetourimport = 2; static final int coderetourexport = 3; Ø Modifiez la méthode imageclick Exemple pour l'activity Identification // On créé un objet Bundle, c'est ce qui va nous permetre d'envoyer // des données à l'autre Activity si nécessaire Bundle objetbunble = new Bundle(); objetbunble.putstring("xxxx", "xxxxx"); // On créé l'intent qui va nous permettre de démarrer l'autre // Activity Intent intent = new Intent(this, Identification.class); // On affecte à l'intent le Bundle que l'on a créé intent.putextras(objetbunble); // On démarre l'autre Activity startactivityforresult(intent, coderetouridentification); Ø Créez la méthode qui permet de récupérer le résultat de l'activity appelée protected void onactivityresult(int requestcode, int resultcode, Intent data) { // on regarde quelle Activity a répondu switch (requestcode) { case coderetouridentification: // On regarde qu'elle est la réponse envoyée et en fonction de la // réponse on????. switch (resultcode) { case???: return; case????: return; Dans l'activity appelée setresult(???); finish(); Exemple de réponse : Activity.RESULT_OK, Activity.RESULT_CANCELED,... http://www.reseaucerta.org CERTA - juin 2014 v1.0 Page 4/7

Import des données Ø Créez l'activity ActImport Règles de gestion : Si l'import des données clients est réussi, effacer toutes les données clients de la base DB4o, puis ajouter les données de l'import. Layout Un bouton "ok" et un bouton "cancel" Code : Ø Créez dans Modele 2 méthodes : void deleteclient() qui permet de supprimer toutes les instances de la classe client (cf. listeclient() avec db.delete( )) void addclient(arraylist<client> vclient) qui, à partir d'une collection de Client, va les ajouter à DB4o. Nous ne testerons pas l'existence de ces objets puisque c'est une création (appel de la méthode après l'appel de deleteclient()). Ø Modifiez la classe Connexion pour intégrer l'activity ActImport. Ø Modifiez les paramètres d'appel de la classe Connexion pour une exécution de import.php Ø Ajoutez à l'activity ActImport la méthode retourimport(stringbuilder sb) Cette méthode sera appelée à partir de la méthode onpostexecute de la classe Connexion. Ci joint le code d'une partie de cette méthode qui permet, à partir de la réception d'un tableau de Json et à partir de GSON, de reconstituer les objets de la classe Client et de les stocker dans une Arraylist public void retourimport(stringbuilder sb) { JsonElement json = new JsonParser().parse(sb.toString()); JsonArray varray = json.getasjsonarray(); Gson gson = new GsonBuilder().setDateFormat("yyyy-mm-dd").create(); ArrayList<Client> listeclient = new ArrayList<Client>(); for (JsonElement obj : varray) { Client client = gson.fromjson(obj.getasjsonobject(), Client.class); client.setsituation(0); client.setdernierreleve(0.0); client.setdatedernierreleve(new Date()); client.setsignaturebase64(""); listeclient.add(client); //... Ø Terminez le code de la méthode retourimport Suppression et ajout des clients si ArrayList n'est pas vide Retour à la main activity avec le code de retour Ø Créez import.php à l'image de connect.php. http://www.reseaucerta.org CERTA - juin 2014 v1.0 Page 5/7

Export des données Ø Créez l'activity ActExport Règles de gestion : Si l'export des données clients est réussi, effacer toutes les données clients de la base DB4o. Ici, nous ne nous soucierons pas de la problématique des accès concurrents puisque les enregistrements sont uniquement dédiés aux relevés des compteurs et non à l'aspect commercial ou financier de l'activité. Nous considérerons que c'est un export global et non partiel : l'agent EDF les envoie quand ils sont tous traités. Layout Un bouton "ok" et un bouton "cancel" Code : Ø Modifiez la classe Connexion pour intégrer l'activity ActExport. Ø Ajouter à la classe Actexport la variable private String sclient=""; Ø Modifiez les paramètres d'appel de la classe Connexion pour une exécution de export.php pour ajouter le 4 paramètre : sclient. Ø Modifiez la méthode on create afin d'initialise sclient sclient est une chaine de caractères des informations clients, encodées en JSON et séparées par un séparateur (choix arbitraire @@@) permettant de les traiter dans export.php Modele modele = new Modele(); ArrayList<Client> listclient = modele.listeclient(); Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd hh:mm:ss.s").create(); int i = 0; for (Client vcli : listclient) { sclient = sclient + gson.tojson(vcli); i++; if (i < listclient.size()) { sclient = sclient + "@@@"; Ø Modifiez la classe Connexion afin d'ajouter la prise en compte de ce 4 ème paramètre dans la méthode doinbackground String vlistcli=""; if (vclassactivity.contains("actexport")) { vlistcli = params[3]; http://www.reseaucerta.org CERTA - juin 2014 v1.0 Page 6/7

Puis ajout de ce paramètre aux paramètres passés en post de la même manière que pour l'activity Identification if (vclassactivity.contains("actexport") ) { JSONObject jsonparam = new JSONObject(); jsonparam.put("id", vid); jsonparam.put("pass", vpass); jsonparam.put("listcli", vlistcli); out.write(jsonparam.tostring()); out.flush(); Ø Créez export.php à l'image de connect.php. Traitement et modification des clients via : $data = json_decode(file_get_contents("php://input"),true); $id=$data['id']; $pass=$data['pass']; $listcli=$data['listcli']; $tabclient = explode("@@@", $listcli); foreach ($tabclient as $client) { $clientdecode = json_decode($client); $sql = "UPDATE client SET datedernierreleve='".$clientdecode- >{'datedernierreleve'."',situation=".$clientdecode->{'situation'.",dernierreleve=".$clientdecode- >{'dernierreleve'.",signaturebase64='".$clientdecode->{'signaturebase64'."' where identifiant='".$clientdecode- >{'identifiant'."'"; $result = mysql_query($sql); Ø Modifiez export.php pour renvoyer 1 si l'update des clients est réussi, 0 sinon Ø Ajoutez à l'activity ActExport la méthode retourexport(stringbuilder sb) Cette méthode sera appelée à partir de la méthode onpostexecute de la classe Connexion. Cette méthode permet un retour à la main activity avec le code de retour en analysant sb. http://www.reseaucerta.org CERTA - juin 2014 v1.0 Page 7/7