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 :

Listener AutoCompleteTextView bug si vide


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 154
    Points : 87
    Points
    87
    Par défaut Listener AutoCompleteTextView bug si vide
    Bonjour a tous, j'ai un petit souci sur un autocomple, je vous explique j'ai fait un listener qui actualiser a chaque changement de texte voici le code:

    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
      //Changer a chaque changemenr de textr la bar de progres
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    // AutoCompleteTextView AC_pression = (AutoCompleteTextView) findViewById(R.id.AC_pression);
                    int V_pression = 0;
                    final AutoCompleteTextView AC_pression = (AutoCompleteTextView) findViewById(R.id.AC_pression);
                    V_pression = Integer.parseInt(AC_pression.getText().toString());
                    //int litre = 6;
                    //double beu =1.1;
                    TextView TV_consomation = (TextView) findViewById(R.id.TV_consomation);
                    TV_consomation.setText("il lui reste "+ 6*V_pression*1 +"litre");
                    Log.d("Debug", String.valueOf(V_pression));
                    if (V_pression >=310) {
                        ProgressBar PB_pression = (ProgressBar) findViewById(R.id.circular_progress_bar);
                        ObjectAnimator anim = ObjectAnimator.ofInt(PB_pression, "progress", 0, 100);
                        anim.setDuration(1500);
                        anim.setInterpolator(new DecelerateInterpolator());
                        PB_pression.setProgress(100);
                        Drawable progressDrawable = getResources().getDrawable(R.drawable.circular_progressbar);
                        PB_pression.setProgressDrawable(progressDrawable);
                        anim.start();
                    }
    et cela dfonctione a merveille, seulement voila si j'entre des chiffre que que ensuite j'efface le dernier chiffre mon app plente et me met ce message ci:

    java.lang.NumberFormatException: Invalid int: ""
    je comprends bien le problème mais je ne vois pas comment le contourné...

    est ce que je doit définir un valeur par défaut?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Bonjour,

    Le problème se trouve précisément sur cette ligne
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    V_pression = Integer.parseInt(AC_pression.getText().toString());
    Une fois le dernier caractère effacé, ton AutoCompleteTextView a pour contenu une chaine vide "". Et quand tu appelles Integer.parseInt() sur un caractère qui n'est pas un entier, tu auras une exception de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.NumberFormatException:
    . Pour éviter cela, si m'appuie sur ton code, il faudra à chaque fois qu'un caractère est supprimé de ton AutoCompleteTextView, vérifier si la valeur restante peut être représenté en int. Tu peux y arriver en utilisant cette méthode :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public static boolean verifierInt(String entier) {
            try {
                Integer.parseInt(entier);
                //Pas d'erreur, renvoyer true pour dire que voilà, c'est un entier en paramètre
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                //La valeur passée en paramètre ne peut être transformée en int, renvoyer false
                return false;
            }
        }

    Et tu l'utilises dans ton code comme suit :
    Code java : 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
     
    //Changer a chaque changemenr de textr la bar de progres
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    // AutoCompleteTextView AC_pression = (AutoCompleteTextView) findViewById(R.id.AC_pression);
                    int V_pression = 0;
                    final AutoCompleteTextView AC_pression = (AutoCompleteTextView) findViewById(R.id.AC_pression);
     
                    /*
                       Vérification
                    */
                    if(!verifierInt(AC_pression.getText().toString())){
                         //Sortir directement de la méthode onTextChanged car une chaine vide ne peut être un entier...
                         return;
                    }
     
                    V_pression = Integer.parseInt(AC_pression.getText().toString());
                    //int litre = 6;
                    //double beu =1.1;
                    TextView TV_consomation = (TextView) findViewById(R.id.TV_consomation);
                    TV_consomation.setText("il lui reste "+ 6*V_pression*1 +"litre");
                    Log.d("Debug", String.valueOf(V_pression));
                    if (V_pression >=310) {
                        ProgressBar PB_pression = (ProgressBar) findViewById(R.id.circular_progress_bar);
                        ObjectAnimator anim = ObjectAnimator.ofInt(PB_pression, "progress", 0, 100);
                        anim.setDuration(1500);
                        anim.setInterpolator(new DecelerateInterpolator());
                        PB_pression.setProgress(100);
                        Drawable progressDrawable = getResources().getDrawable(R.drawable.circular_progressbar);
                        PB_pression.setProgressDrawable(progressDrawable);
                        anim.start();
                    }

    Remarque : Inflate les views dans la méthode onCreate() de l'activity. C'est l'endroit idéal pour le faire et non pas dans les actions de boutons, editText.... Par là je te demande de bien vouloir enlever les deux lignes suivantes de la méthode onTextChanged() et mets les dans onCreate de l'activity :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TV_consomation = (TextView) findViewById(R.id.TV_consomation);
     
    AC_pression = (AutoCompleteTextView) findViewById(R.id.AC_pression);
     
    PB_pression = (ProgressBar) findViewById(R.id.circular_progress_bar);

    Tout en déclarant au niveau global les variables suivantes :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TextView TV_consomation;
    final AutoCompleteTextView AC_pression;
    ProgressBar PB_pression;

    Christian Djo,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 154
    Points : 87
    Points
    87
    Par défaut
    Mais c'est tous simplement merveilleux!!

    c'est exactement ce que je cherchait merci beaucoup!!

    je passe donc e sujet en résolut et merci encore pour l'efficacité!!

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

Discussions similaires

  1. Bug avec les "div" vides ?
    Par Pragmateek dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/03/2008, 13h07
  2. [CSV] BUG => variable qui se vide
    Par vraipolite dans le forum Langage
    Réponses: 3
    Dernier message: 11/09/2007, 18h29
  3. FB: DB vide, impossible de connecter : Bug ou Pas Bug ?
    Par Rica dans le forum Connexion aux bases de données
    Réponses: 1
    Dernier message: 14/05/2005, 11h15
  4. [CR9] Bug avec les champs à valeur vide ?
    Par Djob dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 15/07/2003, 21h21

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