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 :

Méthode qui bloque le lancement de l'activité


Sujet :

Android

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 5
    Points
    5
    Par défaut Méthode qui bloque le lancement de l'activité
    Bonjour, je suis débutant en programmation java et android, et je réalise une application pour le bac. Actuellement je rencontre un petit problème lors du lancement d'une de mes activité, la méthode que j'ai créée semble mal agir sur mon application (voire pas du tout). Je poste le petit bout de code qui me pose, problème, pense que c'est une erreur de débutant .

    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
     
    public class NewactivityActivity extends Activity implements OnClickListener {	
     
     
          ImageView perso;
          private int nbrepif;
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_newactivity);
     
            ImageView perso=(ImageView)findViewById(R.id.imageView1);	
     
     
            valider.setOnClickListener(this);
            passer.setOnClickListener(this);
     
            nbrepif=(int)(Math.random()*78);
     
            rep();
     
     
        }
     
     public void rep(){
     
    		    	switch(nbrepif)
    		        {
    		        case 1:
     
    		        	perso.setImageResource(R.drawable.image1);
     
    		        break;
     
    ..............
    	        case 78:
     
    		        	perso.setImageResource(R.drawable.image78);
     
    		        break;
     
    		        }
          }
    }
    Voilà j'ai allégé mon code au maximum pour être lisible. Je suis convaincu que le problème se trouve au niveau de ma méthode rep(), car sans elle l'activité se lance normalement.

    Merci pour votre aide!

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ImageView perso=(ImageView)findViewById(R.id.imageView1);
    Fait deux choses: déclarer une variable "perso" (qui va cacher la variable membre de l'activité) et lui assigner une valeur. Pendant ce temps là, la valeur de l'activité n'est pas modifiée => la fonction rep() va fonc envoyer un NullPointerException.

    D'ailleurs, la description du problème aurait du commencer par là:
    Mon application quitte "XXXX has stopped", avec dans les logs (logcat) une erreur (et une stacktrace) qui aurait montré le problème directement.

    Eclipse propose tout un tas de warning là dessus qu'il est bon d'utiliser (forcer "this." pour les membres, mettre un warning quand une variable en cache une autre, ...).

    Pour la fonction rep(), il existe plein d'autres moyen qu'un gros switch / case...
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int ret;
    try {
       String name = "image"+Integer.toString(nbrepif);
       ret = R.drawable.class.getField(name).getInt(null);
    } catch (Excption ex) {
       Log.e(CLASS_TAG,"Erreur de récupération de l'image pour "+nbrepif,ex);
       ret = 0;
    }
    return ret;
    Autre solution, sans passer par la reflection de Java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private static int[] IMAGE_IDS = { R.drawable.image1, .... R.drawable.image78 };
     
    public void rep()
    {
        perso.setImageResource(IMAGE_IDS[nbrepif]);
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Salut, merci de ta réponse rapide. Je ne comprend pas la structure que tu a utilisé dans ta première solution, je n'ai jamais vu cela, et je préfère comprendre ce que j'utilise plutôt que de le recopier bêtement. Pour ce qui qui est de la seconde j'avais déjà essayé cette structure mais il me semblait que la première image du tableau n'était pas systématiquement associée au nombre 1 (dit moi si je me trompe).

    Sinon il n'y a pas possibilité de procéder de la même que sur mon code de départ?

    Merci

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Non... les indices d'un tableau commencent à 0 en java.... 0 à (n-1)

    Mais en même temps: "nbrepif=(int)(Math.random()*78);" va donner un nombre entre 0 (inclus) et 77 (inclus), donc ca colle....

    Oui du coup, mon premier code ne marche pas... il faut faire Integer.toString(nbrepif+1);
    Ton "switch" non plus au passage....


    Pour expliquer le 1er code:
    Qu'est ce que "R.drawable.imageXX" ? c'est un membre public (imageXX) de type "int" appartenant à la classe "R.drawable".
    Java étant pleinement reflexif, on va demander à la classe une référence sur ce membre: "R.drawable.class.getField("imageXX")", et à cette référence sa valeur (getInt()). Comme c'est un membre statique, on ne passe pas "d'instance" de classe (donc getInt(null)).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    C'est bon, ça marche nickel. J'ai utilisé le tableau de drawable et c'est vrai que si j'associe les bonnes variables aux bonnes images ça marche mieux .

    Merci beaucoup, je passe en résolu.

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

Discussions similaires

  1. [Installation] Message d'erreur qui bloque le lancement de SAS
    Par jeanjacques03 dans le forum Administration et Installation
    Réponses: 5
    Dernier message: 21/05/2014, 16h13
  2. Méthode qui bloque l'application
    Par Mister Nono dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2008, 11h44
  3. Lancement macro : SAS qui bloque
    Par id301077 dans le forum Macro
    Réponses: 2
    Dernier message: 10/10/2008, 09h58
  4. Réponses: 3
    Dernier message: 28/08/2007, 10h15
  5. une méthode qui écrit dans la sortie html ?
    Par iubito dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 03/12/2003, 15h34

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