IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

AsyncTask paramétrable et Webservices


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 35
    Par défaut AsyncTask paramétrable et Webservices
    Bonjour,

    En bossant sur un projet, je me rend compte que je pourrai essayer de ne pas dupliquer certaines parties de mon code pour me faciliter la tâche. Cependant, je ne suis pas certain de comprendre comment faire. Je m'explique :

    Pour appeler un webservice je fais comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    private OnClickListener OnClickListenerSeconnecter = new OnClickListener() {
    		@Override
    		public void onClick(View v) 
    		{
    			new LogginIntoAppli().execute();
    		}
     
    	};
    /**
             * Async task to use WebServices
             * */
    	private class LogginIntoAppli extends AsyncTask<Void, Void, String> {
     
    		//Before starting background thread Show Progress Dialog
    		@Override
    		protected void onPreExecute() {
    			super.onPreExecute();
    			pDialog = new ProgressDialog(MainActivity.this);
    			pDialog.setMessage(MainActivity.this.getResources().getText(R.string.chargement_des_donnees));
    			pDialog.setCancelable(false);
    			pDialog.show();
    		}
     
    		protected String doInBackground(Void... arg) {
     
    			// Utilisation du webservice pour renvoyer le nouveau mot de passe à l'adresse saisie
    			ServiceHandler jsonParser = new ServiceHandler();
    			List<NameValuePair> params = new ArrayList<NameValuePair>();
    			params.add(new BasicNameValuePair("postUserEmail", et_email.getText().toString()));
     
    			String json = jsonParser.makeServiceCall(URL.concat("login.php"), ServiceHandler.POST, params);
     
    			return json;
    		}
     
    		//After completing background task Dismiss the progress dialog
    		protected void onPostExecute(String json) {
    			super.onPostExecute(json);
    			if (pDialog.isShowing()) pDialog.dismiss();
     
    			try
    			{
    				JSONObject jsonObj = new JSONObject(json);
    				if (jsonObj != null)
    				{	
    					if(!jsonObj.isNull("error"))
    					{
    						String res = jsonObj.get("error").toString();
     
    						if(res.equals("user_not_found")) // On fait comme si ça avait été envoyé pour ne pas donner d'indication à des gens mal intentionnés qui pourrait tenter de récupérer les adresses valides
    						{
    							Toast.makeText(MainActivity.this, getResources().getText(R.string.success_forgotten_password), Toast.LENGTH_LONG).show();
    						}
    					}
     
    					if(!jsonObj.isNull("resultState"))
    					{
    						String res = jsonObj.get("resultState").toString();
     
    						if(res.equals("ok"))
    						{
    							Toast.makeText(MainActivity.this, getResources().getText(R.string.success_forgotten_password), Toast.LENGTH_LONG).show();
    						}
    					}
    				}
     
    			} catch (Exception e)
    			{
    				e.printStackTrace();
    			}
     
    		}
     
    	} // Fin ResetPassword
    Mais je dois créer une classe (dans mon exemple : LogginIntoAppli) pour chaque webservice ce qui est assez mauvais.

    Est-il possible de faire quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new maTacheAsynchron().execute("login.php", params, new fonction_s_executant_dans_onPostExecute(){ /*Portion de code à executer*/});
    ?

    Voilà, si vous avez des tutoriels sous la main ou une idée je suis preneur.

    Merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 35
    Par défaut
    En utilisant des runnables peut être ?

    je suis étonné que personne n'ai du faire face à ce problème.

  3. #3
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    De mon coté, j'ai un fichier de config avec les URL des WS, la classe permettant de traiter le résultat, la classe permettant de traiter le retour erreur, la classe de résultat et la classe de l'erreur (faudrait d'ailleurs passer à des generics pour simplifier un peu).
    Une seule classe pour appeler tout les WS, elle se contente de réaliser l'appel réseau et de prendre en main les retours. Si le retour est bon (comprendre : pas un 40X ou 50X), la tâche se charge de parser le tout avec les données qu'elle possède et préviens ensuite ceux qui écoutent via un Observer (qui peut être ciblée ou général).
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 35
    Par défaut
    Ok merci. J'ai pas tout compris sur la fin. Ta classe qui appelle les WS utilise un thread j'imagine. Comment tu renvoies les données pour disons, afficher le résultat dans un textview ?

    Pourrais tu me montrer une exemple de
    Une seule classe pour appeler tout les WS, elle se contente de réaliser l'appel réseau et de prendre en main les retours. Si le retour est bon (comprendre : pas un 40X ou 50X), la tâche se charge de parser le tout avec les données qu'elle possède et préviens ensuite ceux qui écoutent via un Observer (qui peut être ciblée ou général).
    s'il te plaît ?

    je vais me renseigner sur les observables, je ne connais pas du tout :/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/04/2010, 16h27
  2. Envoyer des paramètres à mon WebService
    Par susu39 dans le forum Services Web
    Réponses: 0
    Dernier message: 21/07/2009, 11h00
  3. passage de paramètre à des webservice Talend
    Par wawanito dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 22/05/2009, 11h55
  4. référence "paramétrée" à un webservice
    Par grinder59 dans le forum C#
    Réponses: 3
    Dernier message: 10/02/2009, 11h22
  5. Probleme de passage de paramètre à un WebService
    Par spolo dans le forum Langage
    Réponses: 1
    Dernier message: 14/11/2007, 10h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo