SlideShare une entreprise Scribd logo
session sept 2014 Yann Caron (c) 2014 1
IN01
Programmation Android
Travaux pratiques
Yann Caron
session sept 2014 Yann Caron (c) 2014 2
Au programme

Une application complète : Pêcheur du Léman, c'est de saison !

Seul ou en binôme (c'est libre !)

On peut aussi implémenter par groupe et par fonctionnalité et
on croise !

Une application, comme son nom l'indique, pour les pécheurs
➔
Une base de données d'appâts, de poissons
➔
Les spots de pêches, les prises
➔
Des outils, comme la boussole, la météo
➔
Et tout ce que nous pourrions imaginer
session sept 2014 Yann Caron (c) 2014 3
Sommaire - TP

TP 1 : Prise en main des outils : Hi Android : Eclipse,
ADT, AVD, ADB

TP 2 : Pêcheurs du Léman : Partie I : WYSIWYG,
persistance, logcat

TP 3 : Pêcheurs du Léman : Partie II : HMI, View et
Layout, menus

TP 4 : Pêcheurs du Léman : Partie III : SGBD

TP 5 : Pêcheurs du Léman : Partie IV : WebService
Météo, Map

TP 6 : Pêcheurs du Léman : Partie V : Bousole, Photo
session sept 2014 Yann Caron (c) 2014 4
IN01 – Travaux pratiques
TP 1
Prise en main des outils : Hi Android
Eclipse, ADT, AVD, ADB
session sept 2014 Yann Caron (c) 2014 5
TP 1 – Prise en main

Très facile !

Ouvrir l'ADT Bundle (Android Development Tool –
alias Eclipse + ADT Plugins) et créer un nouveau
projet appelé fr.cnam.in01.HiAndroid !

Remarque : l'ADT crée 2 projets dont
appCompat_v7 c'est une bibliothèque (lib) qui
contient des éléments pour assurer la
rétrocompatibilité des appareils
session sept 2014 Yann Caron (c) 2014 6
TP 1 – Prise en main

Maintenant, créons un virtual device (AVD)
avec l'AVD Manager

Lançons l'application, ça fonctionne déjà !

Allons un peu plus loin. Nous voulons changer
le texte “Hello World” en “Hello Android”, où
cela se passe-t-il ?

Changeons le nom de l'application
session sept 2014 Yann Caron (c) 2014 7
IN01 – Travaux pratiques
TP 2
Pêcheurs du Léman : Partie I
WYSIWYG, persistance, logcat
session sept 2014 Yann Caron (c) 2014 8
TP 2 – PDL – Partie I

Dans Eclipse, créons notre projet
fr.cnam.in01.pecheurDuLeman
(LakeGenevaFisherman marche aussi !!!!)

Créons une première Activity : Bait (les leurres de pêche)

Dans le manifest, déclarons-la et faisons d'elle la main
activity

Utilisons le WYSIWYG disponible pour créer la vue

Attention !! Il nous faut utiliser le fichier string.xml
pour nos labels
session sept 2014 Yann Caron (c) 2014 9
TP 2 – PDL – Partie I

Ce qui est attendu =>

Les vues utilisées :
➔
LinearLayout (vertical)
➔
TextView (pour les
labels)
➔
EditText (pour les
champs de saisie)
session sept 2014 Yann Caron (c) 2014 10
TP 2 – PDL – Partie I

Maintenant nous aimerions comprendre le
cycle de vie de l'application :
➔
Dans l'activity nous allons créer un log dans les
méthodes onCreate, onDestroy, onPause,
onResume
➔
Observons le logcat
session sept 2014 Yann Caron (c) 2014 11
TP 2 – PDL – Partie I

Notre premier Pojo
nous est fourni

Nous devons le
créer dans le
package dto (Data
Transfert Object)
public class Bait {
private String name; private Brand brand;
private float price, size, weight;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// accesseurs, etc.
public Bait() {
super();
}
public Bait(String name, Brand brand,
float price, float size, float weight) {
super();
this.name = name;
// etc.
}
}
session sept 2014 Yann Caron (c) 2014 12
TP 2 – PDL – Partie I

Maintenant, lorsque nous tournons l'écran, nous aimerions
conserver les données saisies par l'utilisateur. Pour passer
les données :
➔
Il faut, dans la méthode onCreate, récupérer références des
objets graphiques
public class BaitActivity extends Activity {
private EditText textName, textBrand;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.bait);
textName = (AutoCompleteTextView) findViewById(R.id.textName);
textBrand = (AutoCompleteTextView) findViewById(R.id.textBrand);
}
}
session sept 2014 Yann Caron (c) 2014 13
TP 2 – PDL – Partie I
➔
Dans la méthode onSaveInstanceState, on crée un
objet dto.Bait avec les données du formulaire
➔
Passer l'objet sérialiser au Bundle

Dans Récupérer les données :
➔
Dans la méthode onRestoreInstanceState, on
déserialise l'objet dto.Bait
➔
On restaure les données du formulaire
session sept 2014 Yann Caron (c) 2014 14
IN01 – Travaux pratiques
TP 3
Pêcheurs du Léman : Partie II
WYSIWYG, persistance, logcat
session sept 2014 Yann Caron (c) 2014 15
TP 3 – PDL – Partie II

Améliorons notre formulaire

Utilisons des AutoCompleteTextView pour le
nom et la marque
session sept 2014 Yann Caron (c) 2014 16
TP 3 – PDL – Partie II

Utilisons les layouts pour
ajouter les boutons d'action
Save et Cancel comme ceci =>

On peut utiliser des
LinearLayout ou des
RelativeLayout

Récupérons les évènements de
ces boutons : c'est pour plus
tard
session sept 2014 Yann Caron (c) 2014 17
TP 3 – PDL – Partie II

Créons un menu :
➔
Fisheries

Statistics
➔
Data

Fishes

Baits
➔
Tools

Compass

Meteo

Solunar Calendar
session sept 2014 Yann Caron (c) 2014 18
TP 3 – PDL – Partie II

Chargeons ce menu dans notre activity

Optionnel, sur le même modèle, créons
l'activity Fish et Fisherie (MCD au slide suivant)

Attention : nous utiliserons les composants
Spinner plutôt qu'AutoCompleteTextView

Pour plus de fun, on pourrait en créer une de
toute pièce (sans XML juste du Java)
session sept 2014 Yann Caron (c) 2014 19
TP 3 – PDL – Partie II
Fishery
date
Place
title
name
longitude
latitude
Catch
time
number
photo
Bait
name
price
size
Fish
name
photo
Brand
name
Familly
name
session sept 2014 Yann Caron (c) 2014 20
IN01 – Travaux pratiques
TP 4
Pêcheurs du Léman : Partie III
SGBD
session sept 2014 Yann Caron (c) 2014 21
TP 4 – PDL – Partie III

Choix du modèle de persistance : SQLite,
ORMLite ou DB4Object

Un conseil, faire 3 groupes pour les 3
approches, puis on croise les expériences

Optionnel : on utilise les couches ou la
MudBox ??
session sept 2014 Yann Caron (c) 2014 22
TP 4 – PDL – Partie III - Architecture
Data Access Layer
Data
Transfert
Objects
Logger
Business Model
View
FishDb4o
FishDAO (CRUD)
FamilyDb4o
FamilyDAO (CRUD)
DBMS
FishBO FamilyBO
FishView FamilyView
Fish
Familly
1..*
Log
session sept 2014 Yann Caron (c) 2014 23
IN01 – Travaux pratiques
TP 5
Pêcheurs du Léman : Partie IV
Webservices météo, Map
session sept 2014 Yann Caron (c) 2014 24
TP 5 – PDL – Partie IV

Pour les plus courageux :
➔
On peut allez chercher les données météo sur
http://weather.yahooapis.com/forecastrss?w=782538 et les afficher dans une vue
personnalisée.
➔
Ou créer une vue personnalisée pour créer un calendrier Solunaire
➔
On peut aussi récupérer la vue Google Maps et épingler le spot de pêche
(géolocalisation) en prenant :

la dernière position connue de l'appareil

les coordonnées CellID ou GPS.
➔
Soyons fous !! On pourrait afficher les données météo sur la map !!
➔
L'idée serait ensuite de pouvoir tout sauver dans la base de données

Là encore, on peut travailler en divisant les groupes et on fusionne.
session sept 2014 Yann Caron (c) 2014 25
TP 5 – PDL – Partie IV
session sept 2014 Yann Caron (c) 2014 26
IN01 – Travaux pratiques
TP 6
Pêcheurs du Léman : Partie V
Boussole, Photos
session sept 2014 Yann Caron (c) 2014 27
TP 6 – PDL – Partie V

Grâce aux vues personnalisées (onDraw est
notre ami), on veut créer une boussole. Il va
falloir utiliser un capteur !!

On aimerait aussi pouvoir prendre des photos
des poissons, des prises et des leurres et les
ajouter à nos formulaires

On peut travailler en 2 groupes !!
session sept 2014 Yann Caron (c) 2014 28
TP 6 – PDL – Partie V
session sept 2014 Yann Caron (c) 2014 29
Liens

Retrouvez tous les cours sur SlideShare :
http://www.slideshare.net/YannCaron1/

Ou sur BitBucket :
https://bitbucket.org/yann_caron/in01/src

Les sources du projet sont sous
/ADTWorkspace
session sept 2014 Yann Caron (c) 2014 30
Fin
 Merci de votre participation :-)
 Finissez l'app chez vous et envoyez-la-nous.
 N'hésitez pas à en parler autour de vous !!
 Un sondage ?? C'est le moment de dire ce que
vous en avez pensé !!

Contenu connexe

Tendances

Programmation Android - 06 - Publication
Programmation Android - 06 - PublicationProgrammation Android - 06 - Publication
Programmation Android - 06 - Publication
Yann Caron
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web services
Yann Caron
 
In01 - Programmation Android - 03 - HMI
In01 - Programmation Android - 03 - HMIIn01 - Programmation Android - 03 - HMI
In01 - Programmation Android - 03 - HMI
Yann Caron
 
Programmation Android - 00 - Présentation
Programmation Android - 00 - PrésentationProgrammation Android - 00 - Présentation
Programmation Android - 00 - Présentation
Yann Caron
 
In01 - Programmation Android - 06 - publication
In01 - Programmation Android - 06 - publicationIn01 - Programmation Android - 06 - publication
In01 - Programmation Android - 06 - publication
Yann Caron
 
Programmation Android - 04 - Databases
Programmation Android - 04 - DatabasesProgrammation Android - 04 - Databases
Programmation Android - 04 - Databases
Yann Caron
 
In01 - Programmation Android - 02 - android
In01 - Programmation Android - 02 - androidIn01 - Programmation Android - 02 - android
In01 - Programmation Android - 02 - android
Yann Caron
 
Programmation Android - 10 - Spatialite
Programmation Android - 10 - SpatialiteProgrammation Android - 10 - Spatialite
Programmation Android - 10 - Spatialite
Yann Caron
 
Programmation Android - 03 - IHM bases
Programmation Android - 03 - IHM basesProgrammation Android - 03 - IHM bases
Programmation Android - 03 - IHM bases
Yann Caron
 
Programmation Android - 08 - Android debug bridge
Programmation Android - 08 - Android debug bridgeProgrammation Android - 08 - Android debug bridge
Programmation Android - 08 - Android debug bridge
Yann Caron
 

Tendances (10)

Programmation Android - 06 - Publication
Programmation Android - 06 - PublicationProgrammation Android - 06 - Publication
Programmation Android - 06 - Publication
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web services
 
In01 - Programmation Android - 03 - HMI
In01 - Programmation Android - 03 - HMIIn01 - Programmation Android - 03 - HMI
In01 - Programmation Android - 03 - HMI
 
Programmation Android - 00 - Présentation
Programmation Android - 00 - PrésentationProgrammation Android - 00 - Présentation
Programmation Android - 00 - Présentation
 
In01 - Programmation Android - 06 - publication
In01 - Programmation Android - 06 - publicationIn01 - Programmation Android - 06 - publication
In01 - Programmation Android - 06 - publication
 
Programmation Android - 04 - Databases
Programmation Android - 04 - DatabasesProgrammation Android - 04 - Databases
Programmation Android - 04 - Databases
 
In01 - Programmation Android - 02 - android
In01 - Programmation Android - 02 - androidIn01 - Programmation Android - 02 - android
In01 - Programmation Android - 02 - android
 
Programmation Android - 10 - Spatialite
Programmation Android - 10 - SpatialiteProgrammation Android - 10 - Spatialite
Programmation Android - 10 - Spatialite
 
Programmation Android - 03 - IHM bases
Programmation Android - 03 - IHM basesProgrammation Android - 03 - IHM bases
Programmation Android - 03 - IHM bases
 
Programmation Android - 08 - Android debug bridge
Programmation Android - 08 - Android debug bridgeProgrammation Android - 08 - Android debug bridge
Programmation Android - 08 - Android debug bridge
 

En vedette

In01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introductionIn01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introduction
Yann Caron
 
Initiation aux echecs
Initiation aux echecsInitiation aux echecs
Initiation aux echecs
Echecs & Stratégie
 
Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015
Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015
Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015
Loïc Knuchel
 
Android Studio, premier contact
Android Studio, premier contactAndroid Studio, premier contact
Android Studio, premier contact
Jasmine Conseil
 
1cours virologie généralités (1)
1cours virologie généralités (1)1cours virologie généralités (1)
1cours virologie généralités (1)
imlen gan
 
Android 6 marshmallow
Android 6 marshmallowAndroid 6 marshmallow
Android 6 marshmallow
Guillermo Lima
 
Angular 4 - ngfor -- Français
Angular 4  - ngfor -- FrançaisAngular 4  - ngfor -- Français
Angular 4 - ngfor -- Français
VERTIKA
 
Radio cognitive et intelligence artificielle
Radio cognitive et intelligence artificielleRadio cognitive et intelligence artificielle
Radio cognitive et intelligence artificielle
benouini rachid
 
Algea - 04 - conclusion
Algea - 04 - conclusionAlgea - 04 - conclusion
Algea - 04 - conclusion
Yann Caron
 
Angular 4 - regles -- Français
Angular 4  - regles -- FrançaisAngular 4  - regles -- Français
Angular 4 - regles -- Français
VERTIKA
 
Devoxx 2015, Atelier Ionic - 09/04/2015
Devoxx 2015, Atelier Ionic - 09/04/2015Devoxx 2015, Atelier Ionic - 09/04/2015
Devoxx 2015, Atelier Ionic - 09/04/2015
Loïc Knuchel
 
Codes malveillants
Codes malveillantsCodes malveillants
Codes malveillants
Christophe Casalegno
 
Mobilization 2017: Don't lose your users because of endless quality issues
Mobilization 2017: Don't lose your users because of endless quality issuesMobilization 2017: Don't lose your users because of endless quality issues
Mobilization 2017: Don't lose your users because of endless quality issues
Olivier Destrebecq
 
Introduction gestion de projet
Introduction gestion de projetIntroduction gestion de projet
Introduction gestion de projet
Mohamed Amine BOURHIL
 
Développement Android
Développement AndroidDéveloppement Android
Développement Android
Franck SIMON
 
02 programmation mobile - android - (activity, view, fragment)
02 programmation mobile - android - (activity, view, fragment)02 programmation mobile - android - (activity, view, fragment)
02 programmation mobile - android - (activity, view, fragment)
TECOS
 
03 programmation mobile - android - (stockage, multithreads, web services)
03 programmation mobile - android - (stockage, multithreads, web services)03 programmation mobile - android - (stockage, multithreads, web services)
03 programmation mobile - android - (stockage, multithreads, web services)
TECOS
 
Les virus
Les virusLes virus
Les virus
Abdeltif LOUARDI
 
Mta
MtaMta
Mta
TECOS
 

En vedette (20)

In01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introductionIn01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introduction
 
Initiation aux echecs
Initiation aux echecsInitiation aux echecs
Initiation aux echecs
 
Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015
Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015
Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015
 
Android Studio, premier contact
Android Studio, premier contactAndroid Studio, premier contact
Android Studio, premier contact
 
1cours virologie généralités (1)
1cours virologie généralités (1)1cours virologie généralités (1)
1cours virologie généralités (1)
 
Android 6 marshmallow
Android 6 marshmallowAndroid 6 marshmallow
Android 6 marshmallow
 
Angular 4 - ngfor -- Français
Angular 4  - ngfor -- FrançaisAngular 4  - ngfor -- Français
Angular 4 - ngfor -- Français
 
Radio cognitive et intelligence artificielle
Radio cognitive et intelligence artificielleRadio cognitive et intelligence artificielle
Radio cognitive et intelligence artificielle
 
Algea - 04 - conclusion
Algea - 04 - conclusionAlgea - 04 - conclusion
Algea - 04 - conclusion
 
Angular 4 - regles -- Français
Angular 4  - regles -- FrançaisAngular 4  - regles -- Français
Angular 4 - regles -- Français
 
Devoxx 2015, Atelier Ionic - 09/04/2015
Devoxx 2015, Atelier Ionic - 09/04/2015Devoxx 2015, Atelier Ionic - 09/04/2015
Devoxx 2015, Atelier Ionic - 09/04/2015
 
Codes malveillants
Codes malveillantsCodes malveillants
Codes malveillants
 
Mobilization 2017: Don't lose your users because of endless quality issues
Mobilization 2017: Don't lose your users because of endless quality issuesMobilization 2017: Don't lose your users because of endless quality issues
Mobilization 2017: Don't lose your users because of endless quality issues
 
Introduction gestion de projet
Introduction gestion de projetIntroduction gestion de projet
Introduction gestion de projet
 
Développement Android
Développement AndroidDéveloppement Android
Développement Android
 
02 programmation mobile - android - (activity, view, fragment)
02 programmation mobile - android - (activity, view, fragment)02 programmation mobile - android - (activity, view, fragment)
02 programmation mobile - android - (activity, view, fragment)
 
03 programmation mobile - android - (stockage, multithreads, web services)
03 programmation mobile - android - (stockage, multithreads, web services)03 programmation mobile - android - (stockage, multithreads, web services)
03 programmation mobile - android - (stockage, multithreads, web services)
 
Montage video
Montage videoMontage video
Montage video
 
Les virus
Les virusLes virus
Les virus
 
Mta
MtaMta
Mta
 

Plus de Yann Caron

Théorie des langages - TP - WellKnownText
Théorie des langages - TP  - WellKnownTextThéorie des langages - TP  - WellKnownText
Théorie des langages - TP - WellKnownText
Yann Caron
 
Théorie des langages - 04 Théorie des langages
Théorie des langages - 04 Théorie des langagesThéorie des langages - 04 Théorie des langages
Théorie des langages - 04 Théorie des langages
Yann Caron
 
Théorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmesThéorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmes
Yann Caron
 
Théorie des langages - 02 - Code gen
Théorie des langages - 02 - Code genThéorie des langages - 02 - Code gen
Théorie des langages - 02 - Code gen
Yann Caron
 
Théorie des langages - 01.1 - Parcours d'arbres
Théorie des langages - 01.1 - Parcours d'arbresThéorie des langages - 01.1 - Parcours d'arbres
Théorie des langages - 01.1 - Parcours d'arbres
Yann Caron
 
Théorie des langages - 01 - Compilation
Théorie des langages - 01 - CompilationThéorie des langages - 01 - Compilation
Théorie des langages - 01 - Compilation
Yann Caron
 
Théorie des langages - 00 - Introduction
Théorie des langages - 00 - IntroductionThéorie des langages - 00 - Introduction
Théorie des langages - 00 - Introduction
Yann Caron
 
Algea - 03 - ennemis
Algea - 03 - ennemisAlgea - 03 - ennemis
Algea - 03 - ennemis
Yann Caron
 
Algea - 02 - gemmes
Algea - 02 - gemmesAlgea - 02 - gemmes
Algea - 02 - gemmes
Yann Caron
 
Algea - 01 - hero
Algea - 01 - heroAlgea - 01 - hero
Algea - 01 - hero
Yann Caron
 
ALGEA - 00 - introduction
ALGEA - 00 - introductionALGEA - 00 - introduction
ALGEA - 00 - introduction
Yann Caron
 
Cours CNAM In01 - Programmation Android - Septembre 2014
Cours CNAM In01 - Programmation Android - Septembre 2014Cours CNAM In01 - Programmation Android - Septembre 2014
Cours CNAM In01 - Programmation Android - Septembre 2014
Yann Caron
 

Plus de Yann Caron (12)

Théorie des langages - TP - WellKnownText
Théorie des langages - TP  - WellKnownTextThéorie des langages - TP  - WellKnownText
Théorie des langages - TP - WellKnownText
 
Théorie des langages - 04 Théorie des langages
Théorie des langages - 04 Théorie des langagesThéorie des langages - 04 Théorie des langages
Théorie des langages - 04 Théorie des langages
 
Théorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmesThéorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmes
 
Théorie des langages - 02 - Code gen
Théorie des langages - 02 - Code genThéorie des langages - 02 - Code gen
Théorie des langages - 02 - Code gen
 
Théorie des langages - 01.1 - Parcours d'arbres
Théorie des langages - 01.1 - Parcours d'arbresThéorie des langages - 01.1 - Parcours d'arbres
Théorie des langages - 01.1 - Parcours d'arbres
 
Théorie des langages - 01 - Compilation
Théorie des langages - 01 - CompilationThéorie des langages - 01 - Compilation
Théorie des langages - 01 - Compilation
 
Théorie des langages - 00 - Introduction
Théorie des langages - 00 - IntroductionThéorie des langages - 00 - Introduction
Théorie des langages - 00 - Introduction
 
Algea - 03 - ennemis
Algea - 03 - ennemisAlgea - 03 - ennemis
Algea - 03 - ennemis
 
Algea - 02 - gemmes
Algea - 02 - gemmesAlgea - 02 - gemmes
Algea - 02 - gemmes
 
Algea - 01 - hero
Algea - 01 - heroAlgea - 01 - hero
Algea - 01 - hero
 
ALGEA - 00 - introduction
ALGEA - 00 - introductionALGEA - 00 - introduction
ALGEA - 00 - introduction
 
Cours CNAM In01 - Programmation Android - Septembre 2014
Cours CNAM In01 - Programmation Android - Septembre 2014Cours CNAM In01 - Programmation Android - Septembre 2014
Cours CNAM In01 - Programmation Android - Septembre 2014
 

In01 - Programmation Android - Travaux pratiques

  • 1. session sept 2014 Yann Caron (c) 2014 1 IN01 Programmation Android Travaux pratiques Yann Caron
  • 2. session sept 2014 Yann Caron (c) 2014 2 Au programme  Une application complète : Pêcheur du Léman, c'est de saison !  Seul ou en binôme (c'est libre !)  On peut aussi implémenter par groupe et par fonctionnalité et on croise !  Une application, comme son nom l'indique, pour les pécheurs ➔ Une base de données d'appâts, de poissons ➔ Les spots de pêches, les prises ➔ Des outils, comme la boussole, la météo ➔ Et tout ce que nous pourrions imaginer
  • 3. session sept 2014 Yann Caron (c) 2014 3 Sommaire - TP  TP 1 : Prise en main des outils : Hi Android : Eclipse, ADT, AVD, ADB  TP 2 : Pêcheurs du Léman : Partie I : WYSIWYG, persistance, logcat  TP 3 : Pêcheurs du Léman : Partie II : HMI, View et Layout, menus  TP 4 : Pêcheurs du Léman : Partie III : SGBD  TP 5 : Pêcheurs du Léman : Partie IV : WebService Météo, Map  TP 6 : Pêcheurs du Léman : Partie V : Bousole, Photo
  • 4. session sept 2014 Yann Caron (c) 2014 4 IN01 – Travaux pratiques TP 1 Prise en main des outils : Hi Android Eclipse, ADT, AVD, ADB
  • 5. session sept 2014 Yann Caron (c) 2014 5 TP 1 – Prise en main  Très facile !  Ouvrir l'ADT Bundle (Android Development Tool – alias Eclipse + ADT Plugins) et créer un nouveau projet appelé fr.cnam.in01.HiAndroid !  Remarque : l'ADT crée 2 projets dont appCompat_v7 c'est une bibliothèque (lib) qui contient des éléments pour assurer la rétrocompatibilité des appareils
  • 6. session sept 2014 Yann Caron (c) 2014 6 TP 1 – Prise en main  Maintenant, créons un virtual device (AVD) avec l'AVD Manager  Lançons l'application, ça fonctionne déjà !  Allons un peu plus loin. Nous voulons changer le texte “Hello World” en “Hello Android”, où cela se passe-t-il ?  Changeons le nom de l'application
  • 7. session sept 2014 Yann Caron (c) 2014 7 IN01 – Travaux pratiques TP 2 Pêcheurs du Léman : Partie I WYSIWYG, persistance, logcat
  • 8. session sept 2014 Yann Caron (c) 2014 8 TP 2 – PDL – Partie I  Dans Eclipse, créons notre projet fr.cnam.in01.pecheurDuLeman (LakeGenevaFisherman marche aussi !!!!)  Créons une première Activity : Bait (les leurres de pêche)  Dans le manifest, déclarons-la et faisons d'elle la main activity  Utilisons le WYSIWYG disponible pour créer la vue  Attention !! Il nous faut utiliser le fichier string.xml pour nos labels
  • 9. session sept 2014 Yann Caron (c) 2014 9 TP 2 – PDL – Partie I  Ce qui est attendu =>  Les vues utilisées : ➔ LinearLayout (vertical) ➔ TextView (pour les labels) ➔ EditText (pour les champs de saisie)
  • 10. session sept 2014 Yann Caron (c) 2014 10 TP 2 – PDL – Partie I  Maintenant nous aimerions comprendre le cycle de vie de l'application : ➔ Dans l'activity nous allons créer un log dans les méthodes onCreate, onDestroy, onPause, onResume ➔ Observons le logcat
  • 11. session sept 2014 Yann Caron (c) 2014 11 TP 2 – PDL – Partie I  Notre premier Pojo nous est fourni  Nous devons le créer dans le package dto (Data Transfert Object) public class Bait { private String name; private Brand brand; private float price, size, weight; public String getName() { return name; } public void setName(String name) { this.name = name; } // accesseurs, etc. public Bait() { super(); } public Bait(String name, Brand brand, float price, float size, float weight) { super(); this.name = name; // etc. } }
  • 12. session sept 2014 Yann Caron (c) 2014 12 TP 2 – PDL – Partie I  Maintenant, lorsque nous tournons l'écran, nous aimerions conserver les données saisies par l'utilisateur. Pour passer les données : ➔ Il faut, dans la méthode onCreate, récupérer références des objets graphiques public class BaitActivity extends Activity { private EditText textName, textBrand; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.bait); textName = (AutoCompleteTextView) findViewById(R.id.textName); textBrand = (AutoCompleteTextView) findViewById(R.id.textBrand); } }
  • 13. session sept 2014 Yann Caron (c) 2014 13 TP 2 – PDL – Partie I ➔ Dans la méthode onSaveInstanceState, on crée un objet dto.Bait avec les données du formulaire ➔ Passer l'objet sérialiser au Bundle  Dans Récupérer les données : ➔ Dans la méthode onRestoreInstanceState, on déserialise l'objet dto.Bait ➔ On restaure les données du formulaire
  • 14. session sept 2014 Yann Caron (c) 2014 14 IN01 – Travaux pratiques TP 3 Pêcheurs du Léman : Partie II WYSIWYG, persistance, logcat
  • 15. session sept 2014 Yann Caron (c) 2014 15 TP 3 – PDL – Partie II  Améliorons notre formulaire  Utilisons des AutoCompleteTextView pour le nom et la marque
  • 16. session sept 2014 Yann Caron (c) 2014 16 TP 3 – PDL – Partie II  Utilisons les layouts pour ajouter les boutons d'action Save et Cancel comme ceci =>  On peut utiliser des LinearLayout ou des RelativeLayout  Récupérons les évènements de ces boutons : c'est pour plus tard
  • 17. session sept 2014 Yann Caron (c) 2014 17 TP 3 – PDL – Partie II  Créons un menu : ➔ Fisheries  Statistics ➔ Data  Fishes  Baits ➔ Tools  Compass  Meteo  Solunar Calendar
  • 18. session sept 2014 Yann Caron (c) 2014 18 TP 3 – PDL – Partie II  Chargeons ce menu dans notre activity  Optionnel, sur le même modèle, créons l'activity Fish et Fisherie (MCD au slide suivant)  Attention : nous utiliserons les composants Spinner plutôt qu'AutoCompleteTextView  Pour plus de fun, on pourrait en créer une de toute pièce (sans XML juste du Java)
  • 19. session sept 2014 Yann Caron (c) 2014 19 TP 3 – PDL – Partie II Fishery date Place title name longitude latitude Catch time number photo Bait name price size Fish name photo Brand name Familly name
  • 20. session sept 2014 Yann Caron (c) 2014 20 IN01 – Travaux pratiques TP 4 Pêcheurs du Léman : Partie III SGBD
  • 21. session sept 2014 Yann Caron (c) 2014 21 TP 4 – PDL – Partie III  Choix du modèle de persistance : SQLite, ORMLite ou DB4Object  Un conseil, faire 3 groupes pour les 3 approches, puis on croise les expériences  Optionnel : on utilise les couches ou la MudBox ??
  • 22. session sept 2014 Yann Caron (c) 2014 22 TP 4 – PDL – Partie III - Architecture Data Access Layer Data Transfert Objects Logger Business Model View FishDb4o FishDAO (CRUD) FamilyDb4o FamilyDAO (CRUD) DBMS FishBO FamilyBO FishView FamilyView Fish Familly 1..* Log
  • 23. session sept 2014 Yann Caron (c) 2014 23 IN01 – Travaux pratiques TP 5 Pêcheurs du Léman : Partie IV Webservices météo, Map
  • 24. session sept 2014 Yann Caron (c) 2014 24 TP 5 – PDL – Partie IV  Pour les plus courageux : ➔ On peut allez chercher les données météo sur http://weather.yahooapis.com/forecastrss?w=782538 et les afficher dans une vue personnalisée. ➔ Ou créer une vue personnalisée pour créer un calendrier Solunaire ➔ On peut aussi récupérer la vue Google Maps et épingler le spot de pêche (géolocalisation) en prenant :  la dernière position connue de l'appareil  les coordonnées CellID ou GPS. ➔ Soyons fous !! On pourrait afficher les données météo sur la map !! ➔ L'idée serait ensuite de pouvoir tout sauver dans la base de données  Là encore, on peut travailler en divisant les groupes et on fusionne.
  • 25. session sept 2014 Yann Caron (c) 2014 25 TP 5 – PDL – Partie IV
  • 26. session sept 2014 Yann Caron (c) 2014 26 IN01 – Travaux pratiques TP 6 Pêcheurs du Léman : Partie V Boussole, Photos
  • 27. session sept 2014 Yann Caron (c) 2014 27 TP 6 – PDL – Partie V  Grâce aux vues personnalisées (onDraw est notre ami), on veut créer une boussole. Il va falloir utiliser un capteur !!  On aimerait aussi pouvoir prendre des photos des poissons, des prises et des leurres et les ajouter à nos formulaires  On peut travailler en 2 groupes !!
  • 28. session sept 2014 Yann Caron (c) 2014 28 TP 6 – PDL – Partie V
  • 29. session sept 2014 Yann Caron (c) 2014 29 Liens  Retrouvez tous les cours sur SlideShare : http://www.slideshare.net/YannCaron1/  Ou sur BitBucket : https://bitbucket.org/yann_caron/in01/src  Les sources du projet sont sous /ADTWorkspace
  • 30. session sept 2014 Yann Caron (c) 2014 30 Fin  Merci de votre participation :-)  Finissez l'app chez vous et envoyez-la-nous.  N'hésitez pas à en parler autour de vous !!  Un sondage ?? C'est le moment de dire ce que vous en avez pensé !!