Vous êtes sur la page 1sur 21

Bienvenue ,ceci est la deuxime partie du tutoriel prcdant [Tutoriel] :Communication Android avec MySQL [PHP] [ Partie 1/2

] . Notre objectif est de faire communiquer notre application Android avec une base de donnes MySQL et faire diffrents oprations (CRUD). Comme le titre indique il y a un BONUS .

Voici le rsultat final de ce tutoriel :

Je sais que vous allez "scroller" jusqu' la fin pour voir le Bonus , mais , je vais commencer par ce bonus tout d'abord

Partie 0 : Bonus : ProgressDialog personnalis:

CustomProgressDialog

Plusieurs entre vous dveloppent des applications android qui ncessitent que l'utilisateur attend un peu du temps afin que le traitement soit termin . Pour cela on utilise des progressDiaolg pour demander de l'utilisateur de patienter ou l'informer . Je vais vous montrer comment personnaliser un progressDialog moderne . Tout d'abord on cre un nouveau projet Android (vous le savez comme mme )

On va crer une classe " C u s t o m P r o g r e s s D i a l o g " qui s'tend de la classe " D i a o l g ": et avec un ctrl + shift + o tout va bien :

p u b l i cc l a s sC u s t o m P r o g r e s s D i a l o ge x t e n d sD i a l o g{

p r i v a t eI m a g e V i e wi v ; p u b l i cC u s t o m P r o g r e s s D i a l o g ( C o n t e x tc o n t e x t ,i n tr e s o u r c e I d O f I m a g e ){ s u p e r ( c o n t e x t ,R . s t y l e . T r a n s p a r e n t P r o g r e s s D i a l o g ) ; W i n d o w M a n a g e r . L a y o u t P a r a m sw l m p=g e t W i n d o w ( ) . g e t A t t r i b u t e s ( ) ; w l m p . g r a v i t y=G r a v i t y . C E N T E R _ H O R I Z O N T A L ; g e t W i n d o w ( ) . s e t A t t r i b u t e s ( w l m p ) ;

s e t C a n c e l a b l e ( f a l s e ) ; s e t O n C a n c e l L i s t e n e r ( n u l l ) ; L i n e a r L a y o u tl a y o u t=n e wL i n e a r L a y o u t ( c o n t e x t ) ; l a y o u t . s e t O r i e n t a t i o n ( L i n e a r L a y o u t . V E R T I C A L ) ; L i n e a r L a y o u t . L a y o u t P a r a m sp a r a m s=n e w

L i n e a r L a y o u t . L a y o u t P a r a m s ( L a y o u t P a r a m s . M A T C H _ P A R E N T ,L a y o u t P a r a m s . W R A P _ C O N T E N T ) ; i v=n e wI m a g e V i e w ( c o n t e x t ) ; i v . s e t I m a g e R e s o u r c e ( r e s o u r c e I d O f I m a g e ) ; l a y o u t . a d d V i e w ( i v ,p a r a m s ) ; a d d C o n t e n t V i e w ( l a y o u t ,p a r a m s ) ;

@ O v e r r i d e p u b l i cv o i ds h o w ( ){ s u p e r . s h o w ( ) ; R o t a t e A n i m a t i o na n i m=n e wR o t a t e A n i m a t i o n ( 0 . 0 f ,3 6 0 . 0 f, A n i m a t i o n . R E L A T I V E _ T O _ S E L F ,. 5 f ,A n i m a t i o n . R E L A T I V E _ T O _ S E L F ,. 5 f ) ; a n i m . s e t I n t e r p o l a t o r ( n e wL i n e a r I n t e r p o l a t o r ( ) ) ; a n i m . s e t R e p e a t C o u n t ( A n i m a t i o n . I N F I N I T E ) ; a n i m . s e t D u r a t i o n ( 3 0 0 0 ) ; i v . s e t A n i m a t i o n ( a n i m ) ; i v . s t a r t A n i m a t i o n ( a n i m ) ; } }

- Il nous reste qu'ajouter la configuration du style dans le fichier" r e s / v a l u e s / s t y l e s . x m l ":

< ! - C u s t o md i a l o g> < s t y l en a m e = " C u s t o m P r o g r e s s D i a l o g "p a r e n t = " @ a n d r o i d : T h e m e . D i a l o g " > < i t e mn a m e = " a n d r o i d : w i n d o w F r a m e " > @ n u l l < / i t e m > < i t e mn a m e = " a n d r o i d : w i n d o w B a c k g r o u n d " > @ a n d r o i d : c o l o r / t r a n s p a r e n t < / i t e m > < i t e mn a m e = " a n d r o i d : w i n d o w I s F l o a t i n g " > t r u e < / i t e m > < i t e mn a m e = " a n d r o i d : w i n d o w C o n t e n t O v e r l a y " > @ n u l l < / i t e m > < i t e mn a m e = " a n d r o i d : w i n d o w T i t l e S t y l e " > @ n u l l < / i t e m > < i t e m n a m e = " a n d r o i d : w i n d o w A n i m a t i o n S t y l e " > @ a n d r o i d : s t y l e / A n i m a t i o n . D i a l o g < / i t e m > < i t e mn a m e = " a n d r o i d : w i n d o w S o f t I n p u t M o d e " > s t a t e U n s p e c i f i e d | a d j u s t P a n < / i t e m > < i t e mn a m e = " a n d r o i d : b a c k g r o u n d D i m E n a b l e d " > t r u e < / i t e m > < i t e mn a m e = " a n d r o i d : b a c k g r o u n d " > @ a n d r o i d : c o l o r / t r a n s p a r e n t < / i t e m > < / s t y l e >

- Pour tester ce progressDialog , il suffit d'instancier la classe et appeler la mthode "show": C u s t o m P r o g r e s s D i a l o g p r o g r e s s D i a l o g=n e wC u s t o m P r o g r e s s D i a l o g ( t h i s , R . d r a w a b l e . l o a d i n g _ t h r o b b e r ) ; p r o g r e s s D i a l o g . s e t C a n c e l a b l e ( t r u e ) ; p r o g r e s s D i a l o g . s h o w ( ) ; / / p r o g r e s s D i a l o g . d i s m i s s ( ) ; - Ajouter cette photo dans le dossier drawable (vous pouvez la changer par un autre modle) :

Partie 1 : Let's code:

Revenons notre objectif principal : communiquer notre application Android avec une base de donnes MySQL et faire diffrents oprations (CRUD). Comme on vu dans la premire partie, notre base (avec un seul table et 4 champs ) est un peu gnrale , vous pouvez travaillez sur vos base .

Voici le concept gnral de notre application :

O: Avant de commencer : AsyncTask , HTTP request , parsing ?? : Il y a des notions qu'on va les utiliser dans le dveloppement de notre application:

1. AsyncTask: vous permet de faire proprement et facilement des oprations en parallle du thread UI. Cette classe permet d'effectuer des oprations d'arrire-plan et de publier les rsultats dans le thread UI sans avoir manipuler de threads ou de handlers.

p r i v a t ec l a s sA d d D a t a A s y n c T a s ke x t e n d s A s y n c T a s k < V o i d ,V o i d ,V o i d >{ @ O v e r r i d e p r o t e c t e dv o i do n P r e E x e c u t e ( ){ / /T O D OA u t o g e n e r a t e dm e t h o ds t u b s u p e r . o n P r e E x e c u t e ( ) ; / /f a i r ed e st r a i t e m e n ta v a n tm e t t r ed e sr e q u t e s:m o n t r e rp r o g r e s s D i a l o gp a re x m p l e } @ O v e r r i d e p r o t e c t e dV o i dd o I n B a c k g r o u n d ( V o i d . . .p a r a m s ){ / /T O D OA u t o g e n e r a t e dm e t h o ds t u b / /i c io nf a i tl e sr e q u e t e s, r e t o u r n e rl e sr e p o n s e re tt r a n s f o r m e rl e sd o n n e sJ S O N( P a r s i n g ) r e t u r nn u l l ; } @ O v e r r i d e p r o t e c t e dv o i do n P o s t E x e c u t e ( V o i dr e s u l t ){ / /T O D OA u t o g e n e r a t e dm e t h o ds t u b s u p e r . o n P o s t E x e c u t e ( r e s u l t ) ; / /i c io n c r i tl ec o d ea p r sl ' e x c u t i o nd ed o I n B a c k g r o u n d / /p a re x m e m p l e:c a c h el ep r o g r e s s D i a l o g,a f f i c h e rl e sr s u l t a t se t c . . }

Remarques: viter les traitements cot U/I dans la mthode doInBackgound ( passage entre activits , cache le progressDialog etc.. ) Essayer toujours de faire des logs (afficher les rsultats dans le logcat ) pour dcouvrir facilement les erreurs. (mme aprs chaque ligne Log.i("msg",monValeur)) Il faut bien connatre le retour de vos fonctions PHP (JSON) afin de les rcuprer . (JSONObject, JSONArray etc. ) VERIFIER QUE LA PERMESSION INTERNET EST AJOUTE SVP . Essayer d'utiliser lmulateur Genymotion : Rapide , performant Pour faire des requtes HTTP et retourner la rponse , on va utiliser utiliser une classe dveloppe par Ravi Tamada dans son fameux site des tutoriels AndroidHive :S e r v i c e H a n d l e r : elle va nous facilite les choses

http://pastebin.com/4VsfVvCA

1: ActivityMain :Ajouter des donnes la base : Cette activit a pour but ,d'ajouter des donnes la base insres par lutilisateur. Voici le code xml du layout activity_main : http://pastebin.com/TE7whc3w

MainActivity

Avant de passer coder

,rappelons qu'on va utiliser le fichier a j o u t _ b d . p h p

Donc on va transmettre 3 valeurs : col2, col3 et col4 ==> HTTP POST request et on a comme rsultat : un seul objet (JSONObject ) qui contient un entier et une chane de caractres (String)

Let's code !

Dans la classe M a i n A c t i v i t y , on va dclarer des variables globales (avant on Create()) : C u s t o m P r o g r e s s D i a l o g p r o g r e s s D i a l o g ; B u t t o na j o u t , a n n u l e r ;

E d i t T e x tc o l 2 V a l e u r , c o l 3 V a l e u r , c o l 4 V a l e u r ; S t r i n gu r l A d d = " h t t p : / / a d d r e s s _ I P _ d u _ P C / e n i s _ a n d r o i d _ c l u b / a j o u t _ b d . p h p " ; A d d D a t a A s y n c T a s kA d d D a t a ;/ /i n s t a n c ed en o t r ea s y n c T a s k S t r i n gm e s s a g e ; i n ts u c c e s s ;

- Dans la mthode o n C r e a t e,on dfinit les variables (les boutons etc.. ) , les listeners des boutons etc. : @ O v e r r i d e p r o t e c t e dv o i do n C r e a t e ( B u n d l es a v e d I n s t a n c e S t a t e ){ s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ; s e t C o n t e n t V i e w ( R . l a y o u t . a c t i v i t y _ m a i n ) ; p r o g r e s s D i a l o g=n e wC u s t o m P r o g r e s s D i a l o g ( t h i s , R . d r a w a b l e . l o a d i n g _ t h r o b b e r ) ; p r o g r e s s D i a l o g . s e t C a n c e l a b l e ( t r u e ) ; a j o u t = ( B u t t o n ) f i n d V i e w B y I d ( R . i d . a j o u t ) ; a n n u l e r = ( B u t t o n ) f i n d V i e w B y I d ( R . i d . a n n u l e r ) ; c o l 2 V a l e u r = ( E d i t T e x t ) f i n d V i e w B y I d ( R . i d . c o l 2 ) ; c o l 3 V a l e u r = ( E d i t T e x t ) f i n d V i e w B y I d ( R . i d . c o l 3 ) ; c o l 4 V a l e u r = ( E d i t T e x t ) f i n d V i e w B y I d ( R . i d . c o l 4 ) ; A d d D a t a= n e wA d d D a t a A s y n c T a s k ( ) ; a j o u t . s e t O n C l i c k L i s t e n e r ( n e wO n C l i c k L i s t e n e r ( ){ @ O v e r r i d e p u b l i cv o i do n C l i c k ( V i e wa r g 0 ){ A d d D a t a . e x e c u t e ( ) ; // excuter l'asyncTask

} } ) ; } - Maintenant on va dfinir notre asyncTask pas pas :Dans la mme classe Main , on cre une classe prive s'tend de AsyncTask nomme :A d d D a t a A s y n c T a s k

p r i v a t ec l a s sA d d D a t a A s y n c T a s ke x t e n d s A s y n c T a s k < V o i d ,V o i d ,V o i d >{ @ O v e r r i d e p r o t e c t e dv o i do n P r e E x e c u t e ( ){ L o g . i ( " a d d " ," o n P r e E x e c u t e " ) ; s u p e r . o n P r e E x e c u t e ( ) ;

/ /i c io nv aa f f i c h e rn o t r ep r o g r e s s D i a l o g

} @ O v e r r i d e p r o t e c t e dV o i dd o I n B a c k g r o u n d ( V o i d . . .p a r a m s ){ L o g . i ( " a d d " ,"s t a r td o I n B a c k g r o u n d " ) ; / * i c io nv af a i r en o t r er e q u t ed et y p eP O S T p u i s q u ' o nad e sd o n n e se n v o y e r r c u p r e rl ar p o n s ee te x t r a i r el e sd o n n e s c o m m eo nd i tp r c d e m m e n t,l er p o n s ec o n t i e n tu n s e u lJ S O N O b j e c ta v e cu ne n t i e re tS t r i n g* / L o g . i ( " a d d " ,"e n dd o I n B a c k g r o u n d " ) ; r e t u r nn u l l ; } @ O v e r r i d e p r o t e c t e dv o i do n P o s t E x e c u t e ( V o i dr e s u l t ){ L o g . i ( " a d d " ," o n P o s t E x e c u t e " ) ; s u p e r . o n P o s t E x e c u t e ( r e s u l t ) ; / *i c io nv ac a c h e rl ep r o g r e s s D i a l o g e ta f f i c h e ru nT o a s ts e l o nl er s u l t a t* /

- Donc on obtient : (http://pastebin.com/Apv7KYMi : code total)

p r i v a t ec l a s sA d d D a t a A s y n c T a s ke x t e n d s A s y n c T a s k < V o i d ,V o i d ,V o i d >{ @ O v e r r i d e p r o t e c t e dv o i do n P r e E x e c u t e ( ){ L o g . i ( " a d d " ," o n P r e E x e c u t e " ) ; s u p e r . o n P r e E x e c u t e ( ) ; p r o g r e s s D i a l o g . s h o w ( ) ; }

@ O v e r r i d e p r o t e c t e dV o i dd o I n B a c k g r o u n d ( V o i d . . .p a r a m s ){

L o g . i ( " a d d " ,"s t a r td o I n B a c k g r o u n d " ) ; / /C r e a t i n gs e r v i c eh a n d l e rc l a s si n s t a n c e S e r v i c e H a n d l e rs h=n e wS e r v i c e H a n d l e r ( ) ;

L i s t < N a m e V a l u e P a i r >n a m e V a l u e P a i r=n e wA r r a y L i s t < N a m e V a l u e P a i r > ( 1 ) ;

n a m e V a l u e P a i r . a d d ( n e w B a s i c N a m e V a l u e P a i r ( " c o l 2 " , c o l 2 V a l e u r . g e t T e x t ( ) . t o S t r i n g ( ) ) ) ; n a m e V a l u e P a i r . a d d ( n e w B a s i c N a m e V a l u e P a i r ( " c o l 3 " , c o l 3 V a l e u r . g e t T e x t ( ) . t o S t r i n g ( ) ) ) ; n a m e V a l u e P a i r . a d d ( n e w B a s i c N a m e V a l u e P a i r ( " c o l 4 " , c o l 4 V a l e u r . g e t T e x t ( ) . t o S t r i n g ( ) ) ) ;

/ /M a k i n gar e q u e s tt ou r la n dg e t t i n gr e s p o n s e S t r i n gj s o n S t r=s h . m a k e S e r v i c e C a l l ( u r l A d d , S e r v i c e H a n d l e r . P O S T , n a m e V a l u e P a i r ) ;/ /t y p e= P O S T

L o g . d ( " R e s p o n s e :" , j s o n S t r ) ; i f( j s o n S t r! =n u l l ){ t r y{

J S O N O b j e c tj s o n O b j=n e wJ S O N O b j e c t ( j s o n S t r ) ; s u c c e s s=j s o n O b j . g e t I n t ( " s u c c e s s " ) ; m e s s a g e=j s o n O b j . g e t S t r i n g ( " m e s s a g e " ) ; L o g . i ( " s u u c e s s " ,S t r i n g . v a l u e O f ( s u c c e s s ) ) ; L o g . i ( " m e s s a g e " ,m e s s a g e ) ;

}c a t c h( J S O N E x c e p t i o ne ){

e . p r i n t S t a c k T r a c e ( ) ; } }

L o g . i ( " a d d " ,"e n dd o I n B a c k g r o u n d " ) ; r e t u r nn u l l ; }

@ O v e r r i d e p r o t e c t e dv o i do n P o s t E x e c u t e ( V o i dr e s u l t ){ L o g . i ( " a d d " ," o n P o s t E x e c u t e " ) ; s u p e r . o n P o s t E x e c u t e ( r e s u l t ) ; i f( p r o g r e s s D i a l o g . i s S h o w i n g ( ) ) {p r o g r e s s D i a l o g . d i s m i s s ( ) ; } i f ( s u c c e s s = = 1 ) { T o a s t . m a k e T e x t ( g e t A p p l i c a t i o n C o n t e x t ( ) ," G o o d" + m e s s a g e , T o a s t . L E N G T H _ L O N G ) . s h o w ( ) ; } e l s e {T o a s t . m a k e T e x t ( g e t A p p l i c a t i o n C o n t e x t ( ) ," E r r e u r "+ m e s s a g e , T o a s t . L E N G T H _ L O N G ) . s h o w ( ) ; } } }

- & ainsi le rsultat:

logcat

Remarque: Si vous cliquez autre fois sur le bouton ajouter , votre application va se fermer (crasher) et l'erreur c'est que AddData est nulle .La solution est de changer la mthode onClick comme suit : p u b l i cv o i do n C l i c k ( V i e wa r g 0 ){ A d d D a t a= n e wA d d D a t a A s y n c T a s k ( ) ; A d d D a t a . e x e c u t e ( ) ;

} 2: ListDataActivity :Afficher les donnes de la base :

- On ajoute une nouvelle activit la projet ListDataActivity dont on va lister les donnes insres dans notre base en appelant le fichier a f f i c h a g e _ b d . p h p . Rappelons qu'on a pas des donnes envoyer ==>HTTP GET & pour la rponse , il diffre selon la valeur de s u c c e s s : Si s u c c e s s=0:

Donc on a dans ce cas un seul JSONObject qui contient un entier et un string.

Si s u c c e s s = 1:

Donc on a dans ce cas un seul JSONObject qui contient un entier (success=1) ,et JSONArray (tableau) dont les indices sont les col1, col2, col3 et col4 - Ainsi , dans l'asyncTask (doInBackground) , on va travailler sur la valeur s u c c e s s, on le rcupere tout dabord , & selon son valeur on dcide de rcuprer le reste des donnes - On va procder comme la premire activit. - Notre l a y o u tcomporte qu'une l i s t V i e w : http://pastebin.com/u8SbFfT5

- Pour faciliter le travail , notre listView sera simple non personnalis (les donnes d'une ligne de la base seront affiches dans la mme ligne ) . Si vous voulez personnaliser votre liste , jetez un il sur ce tutoriel
: [Tutoriel] : ListView Android . Variables globales : C u s t o m P r o g r e s s D i a l o g p r o g r e s s D i a l o g ; S t r i n gu r l G e t = " h t t p : / / 1 9 2 . 1 6 8 . 1 . * / e n i s _ a n d r o i d _ c l u b / a f f i c h a g e _ b d . p h p " ; / / a d r e s s eI Pd uP C G e t D a t a A s y n c T a s kg e t D a t a ; S t r i n gm e s s a g e ;

i n ts u c c e s s ; L i s t V i e wl v ; L i s t < S t r i n g >m y L i s t o f D a t a; A r r a y A d a p t e ra r r a y a d p ;

OnCreate : @ O v e r r i d e p r o t e c t e dv o i do n C r e a t e ( B u n d l es a v e d I n s t a n c e S t a t e ){ s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ; s e t C o n t e n t V i e w ( R . l a y o u t . a c t i v i t y _ l i s t _ d a t a ) ; p r o g r e s s D i a l o g=n e wC u s t o m P r o g r e s s D i a l o g ( t h i s , R . d r a w a b l e . l o a d i n g _ t h r o b b e r ) ; p r o g r e s s D i a l o g . s e t C a n c e l a b l e ( t r u e ) ; l v = ( L i s t V i e w ) f i n d V i e w B y I d ( R . i d . l i s t V i e w 1 ) ; m y L i s t o f D a t a=n e wA r r a y L i s t < S t r i n g > ( ) ; g e t D a t a = n e wG e t D a t a A s y n c T a s k ( ) ; g e t D a t a . e x e c u t e ( ) ; } Notre asyncTask : GetDataAsynck (la mme faon que la prcdente): p r i v a t ec l a s sG e t D a t a A s y n c T a s ke x t e n d s A s y n c T a s k < V o i d ,V o i d ,V o i d >{ @ O v e r r i d e p r o t e c t e dv o i do n P r e E x e c u t e ( ){ L o g . i ( " a d d " ," o n P r e E x e c u t e " ) ; s u p e r . o n P r e E x e c u t e ( ) ; p r o g r e s s D i a l o g . s h o w ( ) ; }

@ O v e r r i d e p r o t e c t e dV o i dd o I n B a c k g r o u n d ( V o i d . . .p a r a m s ){ L o g . i ( " a d d " ,"s t a r td o I n B a c k g r o u n d " ) ; S e r v i c e H a n d l e rs h=n e wS e r v i c e H a n d l e r ( ) ;

/ /M a k i n gar e q u e s tt ou r la n dg e t t i n gr e s p o n s e S t r i n gj s o n S t r=s h . m a k e S e r v i c e C a l l ( u r l G e t ,S e r v i c e H a n d l e r . G E T ) ;

L o g . d ( " R e s p o n s e :" , j s o n S t r ) ;

i f( j s o n S t r! =n u l l ){ t r y{ J S O N O b j e c tj s o n O b j=n e wJ S O N O b j e c t ( j s o n S t r ) ; / /r e t u r nv a l u eo fs u c c e s s s u c c e s s = j s o n O b j . g e t I n t ( " s u c c e s s " ) ; L o g . i ( " s u c c e s s " ,S t r i n g . v a l u e O f ( s u c c e s s ) ) ; i f( s u c c e s s = = 0 ) { / /s u c c e s s = 0= = >t h e r ei sas t r i n g=m e s s a g e m e s s a g e = j s o n O b j . g e t S t r i n g ( " m e s s a g e " ) ; L o g . i ( " m e s s a g e " ,m e s s a g e ) ; } e l s ei f( s u c c e s s = = 1 ) { / /s u c c e s s = 1= = >t h e r ei sa na r r a yo fd a t a=v a l e u r s J S O N A r r a yd a t a V a l u e s=j s o n O b j . g e t J S O N A r r a y ( " v a l e u r s " ) ; / /l o o pe a c hr o wi nt h ea r r a y f o r ( i n tj = 0 ; j < d a t a V a l u e s . l e n g t h ( ) ; j + + ) { J S O N O b j e c tv a l u e s=d a t a V a l u e s . g e t J S O N O b j e c t ( j ) ; / /r e t u r nv a l u e so fc o l 1i nv a l C o l 1 S t r i n gv a l C o l 1 =v a l u e s . g e t S t r i n g ( " c o l 1 " ) ; / /r e t u r nv a l u e so fc o l 2i nv a l C o l 2 S t r i n gv a l C o l 2 =v a l u e s . g e t S t r i n g ( " c o l 2 " ) ; S t r i n gv a l C o l 3 =v a l u e s . g e t S t r i n g ( " c o l 3 " ) ; S t r i n gv a l C o l 4 =v a l u e s . g e t S t r i n g ( " c o l 4 " ) ; / / a d das t r i n gw i t c hc o n t a i n sa l lo fd a t ag e t t e df r o mt h e r e s p o n s e m y L i s t o f D a t a . a d d ( v a l C o l 1 + "-" + v a l C o l 2 + "-" + v a l C o l 3 + "" + v a l C o l 4 ) ; L o g . i ( " R o w" + ( j + 1 ) ,v a l C o l 1 + "-" + v a l C o l 2 + "-" + v a l C o l 3 + "" + v a l C o l 4 ) ; } }

}c a t c h( J S O N E x c e p t i o ne ){

e . p r i n t S t a c k T r a c e ( ) ; } }e l s e{ L o g . e ( " S e r v i c e H a n d l e r " ," C o u l d n ' tg e ta n yd a t af r o mt h eu r l " ) ; }

L o g . i ( " a d d " ,"e n dd o I n B a c k g r o u n d " ) ; r e t u r nn u l l ; }

@ O v e r r i d e p r o t e c t e dv o i do n P o s t E x e c u t e ( V o i dr e s u l t ){ L o g . i ( " a d d " ," o n P o s t E x e c u t e " ) ; s u p e r . o n P o s t E x e c u t e ( r e s u l t ) ; i f( p r o g r e s s D i a l o g . i s S h o w i n g ( ) ) { p r o g r e s s D i a l o g . d i s m i s s ( ) ; } i f ( s u c c e s s = = 1 ) { T o a s t . m a k e T e x t ( g e t A p p l i c a t i o n C o n t e x t ( ) ," B i e nr c u e s" , T o a s t . L E N G T H _ L O N G ) . s h o w ( ) ; / /s h o wt h el i s tv i e wc o n t a i n st h ed a t a a r r a y a d p = n e wA r r a y A d a p t e r ( g e t A p p l i c a t i o n C o n t e x t ( ) , a n d r o i d . R . l a y o u t . s i m p l e _ l i s t _ i t e m _ 1 , m y L i s t o f D a t a ) ; l v . s e t A d a p t e r ( a r r a y a d p ) ; } e l s e { T o a s t . m a k e T e x t ( g e t A p p l i c a t i o n C o n t e x t ( ) ," E r r e u r " , T o a s t . L E N G T H _ L O N G ) . s h o w ( ) ; } } }

Remarques:

J'ai ajout un autre bouton dans la 1er activit qui permet d'afficher la 2eme (ListDatActivity) N'oublier pas de vrifier que la deuxime activit est ajoute dans le manifest.xml Vous pouvez galement changer l'adaptateur de la listeView. L'asynckTask est excut ds que l'activit est cre. Il faut tre attentif la format JSON du rponse: JSONObject , JSONArray (array de donnes)

exemple d'affichage d'une ligne de la liste

Voici le code total de la deuxime activit http://pastebin.com/qUEeT8AJ

3: EditSuppActivity :Editer / Supprimer une donne de la base :

Pour le moment , nous avons dvelopps deux activits qui contiennent deux asyncktask (GET & POST ) avec diffrents rponses. Cette activit (E d i t S u p p A c t i v i t y ) pour but de modifier ou supprimer une donne choisit par utilisateur en cliquant sur une ligne de listeView. Pour moi , j'ai simplifi la liste en mettant tout les donnes dans la mme ligne , donc en cliquant sur une ligne , je vais extraire les donnes chacune dans une variable et les envoient vers cette activit en utilisant i n t e n t On modifie l'activit L i s t D a t a A c t i v i t y en ajoutant dans la mthodeo n C r e a t e : l v . s e t O n I t e m C l i c k L i s t e n e r ( n e wO n I t e m C l i c k L i s t e n e r ( ){ p u b l i cv o i do n I t e m C l i c k ( A d a p t e r V i e w < ? >a r g 0 ,V i e wa r g 1 ,i n ta r g 2 , l o n g a r g 3 ) { / /s =v a l u eo fs e l e t e dr o w S t r i n gs = ( S t r i n g )( l v . g e t I t e m A t P o s i t i o n ( a r g 2 ) ) ; / /o ne a c hr o w,Ih a v es a v ea l lo fd a t as e p a r t e db y' ':c o l 1 c o l 2 c o l 3 c o l 4 S t r i n g [ ]p a t r s=s . s p l i t ( "-" ) ; / / p a r t s [ 0 ]c o n t a i n sv a l u eo fc o l 1,p a r t s[ 1 ]c o n t a i n sv a l u eo f c o l 2o fe a c hr o w I n t e n ti n t e n t=n e wI n t e n t ( L i s t D a t a A c t i v i t y . t h i s , E d i t S u p p A c t i v i t y . c l a s s ) ;

/ / s e n dd a t at ot h en e x ta c t i v i t y i n t e n t . p u t E x t r a ( " c o l 1 V a l u e " ,p a t r s [ 0 ] ) ; i n t e n t . p u t E x t r a ( " c o l 2 V a l u e " ,p a t r s [ 1 ] ) ; i n t e n t . p u t E x t r a ( " c o l 3 V a l u e " ,p a t r s [ 2 ] ) ; i n t e n t . p u t E x t r a ( " c o l 4 V a l u e " ,p a t r s [ 3 ] ) ; s t a r t A c t i v i t y F o r R e s u l t ( i n t e n t ,1 0 0 ) ; f i n i s h ( ) ; } } ) ; Aprs avoir passer les donnes , on va les mettre dans des E d i t T e x t inchanges (s e t E n a b l e d ( f a l s e ) ). On cre 3 Boutons : 1. Editer : pour activer la modification 2. Enregistrer : pour sauvegarder les donnes (Mise jour dans la base) 3. Supprimer :pour supprimer les donnes de la base. 4. Code xml du layout a c t i v i t y _ e d i t _ s u p p . x m l: http://pastebin.com/RR17Uz5j

activity_edit_supp.xml

Bon le dmarche est le suivant :

1. Si l'utilisateur clique sur S u p p r i m e r(les autres sont desactivs) : les donnes seront supprimes de la base ==> AsyncTask 2. S'il clique sur E d i t e r, les champs seront actives ainsi le bouton E n r e g i s t r e r. 3. C'est un jeu de boutons A- SuppDataAsyncTask : AsyncTask pour supprimer la ligne slectionne: C'est presque comme les classes prcdents !

==> On doit envoyer une valeur (paramtre : col1) ==> HTTP POST Pour le retour de la requte:

==> Un JSONObject avec un entier et String

On dclare les variables globales ncessaires : urlSupp(url vers le fichiers u p p r e s s i o n _ b d . p h p ), success , message , progressDialog: s u p p . s e t O n C l i c k L i s t e n e r ( n e wO n C l i c k L i s t e n e r ( ){

@ O v e r r i d e p u b l i cv o i do n C l i c k ( V i e wv ){ / /T O D OA u t o g e n e r a t e dm e t h o ds t u b n e wS u p p D a t a A s y n c T a s k ( ) . e x e c u t e ( ) ; } } ) ;

& pour l'asyncTask : p r i v a t ec l a s sS u p p D a t a A s y n c T a s ke x t e n d s A s y n c T a s k < V o i d ,V o i d ,V o i d >{ @ O v e r r i d e p r o t e c t e dv o i do n P r e E x e c u t e ( ){ L o g . i ( " s u p p " ," o n P r e E x e c u t e " ) ; s u p e r . o n P r e E x e c u t e ( ) ; p r o g r e s s D i a l o g . s h o w ( ) ; }

@ O v e r r i d e p r o t e c t e dV o i dd o I n B a c k g r o u n d ( V o i d . . .p a r a m s ){ L o g . i ( " s u p p " ,"s t a r td o I n B a c k g r o u n d " ) ; S e r v i c e H a n d l e rs h=n e wS e r v i c e H a n d l e r ( ) ; L i s t < N a m e V a l u e P a i r >n a m e V a l u e P a i r=n e wA r r a y L i s t < N a m e V a l u e P a i r > ( 1 ) ; n a m e V a l u e P a i r . a d d ( n e w B a s i c N a m e V a l u e P a i r ( " c o l 1 " , v a l C O L 1 . g e t T e x t ( ) . t o S t r i n g ( ) ) ) ; / /M a k i n gar e q u e s tt ou r la n dg e t t i n gr e s p o n s e S t r i n gj s o n S t r=s h . m a k e S e r v i c e C a l l ( u r l S u p p , S e r v i c e H a n d l e r . P O S T , n a m e V a l u e P a i r ) ;

L o g . d ( " R e s p o n s e :" , j s o n S t r ) ; i f( j s o n S t r! =n u l l ){ t r y{

J S O N O b j e c tj s o n O b j=n e wJ S O N O b j e c t ( j s o n S t r ) ; / /r e t u r nv a l u eo fs u c c e s s s u c c e s s = j s o n O b j . g e t I n t ( " s u c c e s s " ) ; m e s s a g e=j s o n O b j . g e t S t r i n g ( " m e s s a g e " ) ; L o g . i ( " s u u c e s s " ,S t r i n g . v a l u e O f ( s u c c e s s ) ) ; L o g . i ( " m e s s a g e " ,m e s s a g e ) ;

}c a t c h( J S O N E x c e p t i o ne ){ e . p r i n t S t a c k T r a c e ( ) ; } }e l s e{ L o g . e ( " S e r v i c e H a n d l e r " ," C o u l d n ' tg e ta n yd a t af r o mt h eu r l " ) ; }

L o g . i ( " s u p p " ,"e n dd o I n B a c k g r o u n d " ) ; r e t u r nn u l l ; }

@ O v e r r i d e p r o t e c t e dv o i do n P o s t E x e c u t e ( V o i dr e s u l t ){ L o g . i ( " s u p p " ," o n P o s t E x e c u t e " ) ; s u p e r . o n P o s t E x e c u t e ( r e s u l t ) ;

i f( p r o g r e s s D i a l o g . i s S h o w i n g ( ) ) { p r o g r e s s D i a l o g . d i s m i s s ( ) ; } i f ( s u c c e s s = = 1 ) { T o a s t . m a k e T e x t ( g e t A p p l i c a t i o n C o n t e x t ( ) ," S u p p r i m " , T o a s t . L E N G T H _ L O N G ) . s h o w ( ) ; } e l s e { T o a s t . m a k e T e x t ( g e t A p p l i c a t i o n C o n t e x t ( ) ," E r r e u r " , T o a s t . L E N G T H _ L O N G ) . s h o w ( ) ; } I n t e n ti n t e n t=n e wI n t e n t ( E d i t S u p p A c t i v i t y . t h i s , L i s t D a t a A c t i v i t y . c l a s s ) ; s t a r t A c t i v i t y F o r R e s u l t ( i n t e n t ,1 0 0 ) ; f i n i s h ( ) ; } } B- UpdateDataAsyncTask : AsyncTask pour mise jour la ligne slectionne: Cette asyncTask est similaire l'asyncTask d'jout de donnes (mais dans la requte en ajoute la valeur de col1)

Je pense que vous avez appris le principe :D

Partie 3 : Conclusion: Aprs ces deux parties , j'espre que vous avez appris une leon trs important dans la vie professionelle (PFE , tude etc. ) . Il y a beaucoup des notions , mais ce sont facile comprendre , surtout que ce tutoriel est gnrale et vous pouvez l'utiliser tel qu'il est en changants les champs (col1= id , col2= prix etc.. ) Je vous souhaite bonne chance , et s'il y a une question , n'hesitez pas de nous contacter et poser vos questions soit par email (enisandroidclub@gmail.com) soit par un commentaire. En fin je vous donne le lien de tlchargemnt du code source total: lien