Académique Documents
Professionnel Documents
Culture Documents
] . 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 .
Je sais que vous allez "scroller" jusqu' la fin pour voir le Bonus , mais , je vais commencer par ce bonus tout d'abord
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 ) ; } }
< ! - 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) :
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 .
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.
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
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 !
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
/ /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* /
@ 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 ){
/ /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 ( ) ; } }
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 ( ) ;
- 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:
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 ( ) ; }
/ /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 ){
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)
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
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:
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 ( ) ; } } ) ;
@ 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 ) ;
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)
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