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 :

appeller une fonction dans une classe depuis une autre classe


Sujet :

Android

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 141
    Points : 134
    Points
    134
    Par défaut appeller une fonction dans une classe depuis une autre classe
    bonjours, ça me gène énormément de vous poser cette question basique mais comment on fait pour appeler une classe à partir d'une autre classe dans android

    Je souhaite appeler cette méthode qui est dans la classe Error à partir d'autres classes.
    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
     
    public class CheckError extends Activity {
    public void checkErrors(String where, String errCode) {
     
    	switch(Integer.parseInt(errCode)) {
    	case 14:
    		//sql error
    		Toast.makeText(getBaseContext(), getString(R.string.error)+" "+where+errCode+": SQL", Toast.LENGTH_LONG).show();
    		break;
    	case 15:
    		//point virgule dans la chaine
    		Toast.makeText(getBaseContext(), getString(R.string.error)+" "+where+errCode+": rajouter un string pour dir qu'il y a un ;", Toast.LENGTH_LONG).show();
    		break;
    	case 40:
    		//connection error
    		//Toast.makeText(getBaseContext(), getString(R.string.errorFTP), Toast.LENGTH_LONG).show();
    		break;
    	case 90:
    		//table missing
    		Toast.makeText(getBaseContext(), getString(R.string.error)+" "+where+errCode+": "+getString(R.string.errortablemissing), Toast.LENGTH_LONG).show();
    		break;
    	case 91:
    		//user error
    		Toast.makeText(getBaseContext(), getString(R.string.error)+" "+where+errCode+":"+getString(R.string.erroridmissing), Toast.LENGTH_LONG).show();
    		break;
    	case 63:
    		//no record present
    		Toast.makeText(getBaseContext(), getString(R.string.error)+" "+where+errCode+": "+getString(R.string.errornodata), Toast.LENGTH_LONG).show();
    		break;
    	default:
    		//other error
    		Toast.makeText(getBaseContext(), getString(R.string.error)+" "+where+errCode, Toast.LENGTH_LONG).show();
    		break;
    	} 
    }
    }
    }
    j'ai essayé ceci dans cette autre classe pour appeler l'application
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    final CheckError instanceCheck = new CheckError();
    (...)
    instanceCheck.checkErrors("25-1-",variableTestee);
    (...)
    Le programme compile mais m'envoie un avertissement sans exécuter la fonction.
    Si je veux appeler directement depuis la classe, il me demande à ce que la fonction devienne statique ce qui fait que getBaseContext() ne fonctionne plus.
    Je crains de ne pas avoir compris qqch de très basique.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    Le problème vient du fait que tu essaies d'afficher un toast dans une activity qui n'existe pas, ou plutôt qui n'est pas affichée.
    Pourquoi ne places tu pas simplement cette méthode d'affichage de toast dans ton activity courante ?

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 141
    Points : 134
    Points
    134
    Par défaut
    parce que d’appel la même méthode une dizaines de fois dans des classes différentes. Donc si ensuite je veux rajouter qqch dans cette méthode, c'est nettement plus rapide de le faire 1 fois que 80 et ça limite les risques d'oubli.

    Si je fais la classe sans passer par l'activité il refuse de me reconnaitre les méthodes dans le toast.(j'ai appelé l'activité dans le manifeste).

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    Alors soit tu rajoutes un paramètre dans ta fonction (Context c)
    Puis dans les Toast, tu indique le contexte c que tu viens de transmettre.

    Ou alors, tu modifie ta méthode pour qu'elle ne te renvoie que du texte. Et c'est l'activity qui appellera cette fonction qui se chargera de 'afficher avec un toast

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Points : 494
    Points
    494
    Par défaut
    Bonjour,

    Soit tu la mets en static et tu lui passes en même temps le context ou soit tu surcharges la classe Activity et tu définis ta méthode dedans. Voilà comment je m'y prendrais pour résoudre ce problème

  6. #6
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    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
     
     
     
    public static  void checkErrors(String error,String where, String errCode, Context context) {
     
    	switch(Integer.parseInt(errCode)) {
    	case 14:
    		//sql error
    		Toast.makeText(context, error+" "+where+errCode+": SQL", Toast.LENGTH_LONG).show();
    		break;
    	case 15:
    		//point virgule dans la chaine
    		Toast.makeText(context,error+" "+where+errCode+": rajouter un string pour dir qu'il y a un ;", Toast.LENGTH_LONG).show();
    		break;
    	case 40:
    		//connection error
    		//Toast.makeText(context, getString(R.string.errorFTP), Toast.LENGTH_LONG).show();
    		break;
    	case 90:
    		//table missing
    		Toast.makeText(context, getString(R.string.error)+" "+where+errCode+": "+getString(R.string.errortablemissing), Toast.LENGTH_LONG).show();
    		break;
    	case 91:
    		//user error
    		Toast.makeText(getBaseContext(), getString(R.string.error)+" "+where+errCode+":"+getString(R.string.erroridmissing), Toast.LENGTH_LONG).show();
    		break;
    	case 63:
    		//no record present
    		Toast.makeText(getBaseContext(), getString(R.string.error)+" "+where+errCode+": "+getString(R.string.errornodata), Toast.LENGTH_LONG).show();
    		break;
    	default:
    		//other error
    		Toast.makeText(context, getString(R.string.error)+" "+where+errCode, Toast.LENGTH_LONG).show();
    		break;
    	} 
    }
    }

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 141
    Points : 134
    Points
    134
    Par défaut
    Je vais prendre ta première idée car l'application fait une répétition de caractères et dans ce cas là pas besoin de mettre la méthode dans une classe à part pour pouvoir être appelée de partout.

    pour remplacer les getBaseContext l'idée est génial elle fonctionne parfaitement.

    Par contre comment faire pour pouvoir employer le getString() qui vient aussi avec l'héritage de l'activity en employant cette idée?

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 141
    Points : 134
    Points
    134
    Par défaut
    jahbromo: en mettant le static j'ai le même problème je ne peux plus appeler les string

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 141
    Points : 134
    Points
    134
    Par défaut
    merci beaucoup ça marche.
    Rajouter Context.getString() pour que ça fonctionne
    pour remplacer le String comme l'un l'a dit et l'a enlever voici l'idée.
    Dommage qu'on habite à des endroits extrêmement éloignés sinon je vous offrirais bien un verre au bistrot.

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

Discussions similaires

  1. appelé une classe depuis une fonction
    Par gotcha5832 dans le forum Langage
    Réponses: 4
    Dernier message: 15/04/2011, 13h07
  2. Appeler une fonction dans un package depuis SQL
    Par Stefan C dans le forum SQL
    Réponses: 2
    Dernier message: 19/06/2009, 18h14
  3. passer une fonction dans un parametre d'une propriété de classe
    Par CAML dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 06/08/2006, 20h52
  4. [VB6] Appel d'une fonction dans un module d'une dll
    Par speedster dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 05/06/2006, 18h37
  5. [AS2] Atteindre attribut d'une classe depuis une fonction interne a la classe
    Par Demco dans le forum ActionScript 1 & ActionScript 2
    Réponses: 6
    Dernier message: 18/04/2006, 22h03

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