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

Composants graphiques Android Discussion :

Problème de boucle de tableau de TextView


Sujet :

Composants graphiques Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Problème de boucle de tableau de TextView
    Bonjour,

    Je suis débutant en Java, notamment sous Android et j'ai quelques questions...

    J'ai editText dans lequel l'utilisateur peut rentrer des données (ici des noms simplement), un tableau de TextView, qui possède 2 TextViews, et un bouton qui permet de rentrer les noms dans les Textviews jusque là tout va bien.

    Ce que j'aimerais c'est qu'automatiquement lorsque un nom est entré par l'utilisateur, l'application puisse repérer dans quelle TextView il faut qu'elle rentre ce nom, par la condition suivante: Si la chaine de caractère du Textview n'est pas égale à 0, alors elle ne rentre pas le nom dans ce Textview, en contrepartie si la chaine de caractère est égal à 0, c'est dans ce Textview qu'il faut qu'elle le rentre.

    J'avais pensé à une boucle while mais apparemment elle ne fonctionne pas...

    Légende: edt1 = edittext; tabtxt = nom de mon tableau de Textview;
    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void leButton(View v){
     
            Editable nom = edt1.getText();
     
            int i = 0;
            while(i < tabtxt.length && tabtxt[i].getText().toString().length() != 0){
                i++;}
            if(tabtxt[i].getText().toString().length() == 0){
                tabtxt[i].setText(nom);
            }
    }
    J'ai pensé que l'erreur venait du fait que je demande le nom des Textviews, à la position de ce dernier, et à modifier le nom de ces valeur, et non pas les chaines de caractères qu'elles contiennent, seulement, j'ignore comment récupérer la chaine de caractère de ces Textviews à partir de ce tableau de Textview...

    J'ai vraiment du mal là car je ne m'y connais pas encore très bien, alors est-ce la bonne méthode à adopter ? Si oui, quels sont mes erreurs ?
    Dans l'autre cas, que dois-je faire ?

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Il manque l’essentiel du code pour pouvoir t'aider : où et comment remplis-tu le tableau tabtxt ?
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Oups pardon j'avais oublié ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TextView[] tabtxt = new TextView[3];
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    @Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
     
    		tabtxt[0] = txtv0;
    		tabtxt[1] = txtv1;
    		tabtxt[2] = txtv3;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     txtv0= (TextView)findViewById(R.id.textView0);
     txtv1 = (TextView)findViewById(R.id.textView1);
     txtv3 = (TextView)findViewById(R.id.textView3);
    Mais je me demandais si il ne fallait pas plutôt faire un tableau de TextView dans ce style là:
    Edit: Désoler je suis vraiment fatigué .....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TextView[] txt = new TextView[3];	
    		txt[0] = (TextView) txtv0.getText();
    		txt[1] = (TextView) txtv1.getText();
    		txt[2] = (TextView) txtv3.getText();
    Le problème c'est que là ça continue de crash :/

    Merci à toi de te pencher sur mon problème Hephaistos007.

  4. #4
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Bizarre. Si ca crash, il nous faut la trace de ton LogCat pour repérer l'erreur

    PS : ta toute dernière solution n'est pas correcte. La première est bonne.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 5
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    ton problème devrait se situer dans ce bloc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while(i < tabtxt.length && tabtxt[i].getText().toString().length() != 0){
    	i++;
    }
    if(tabtxt[i].getText().toString().length() == 0){
    	tabtxt[i].setText(nom);
    }
    Si ta boucle effectue un parcours complet de ton tableau (avec donc i=2), il va encore incrémenter i (donc i=3), et en sortie de boucle tu tenteras d'accéder à tabtxt[3], ce qui provoquera une exception indexOutOfBound.
    Tu devrais donc déplacer ton bloc IF à l'intérieur de ton while, et surtout avant d'incrémenter i, et voir si ça te fait toujours une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while(i < tabtxt.length && tabtxt[i].getText().toString().length() != 0){
    	if(tabtxt[i].getText().toString().length() == 0)
    		tabtxt[i].setText(nom);
    	i++;
    }

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci à vous de prendre le temps de m'aider.

    Je vais vous afficher mon logcat lorsque je clique sur le bouton:
    10-24 06:24:48.971: E/AndroidRuntime(796): FATAL EXCEPTION: main
    10-24 06:24:48.971: E/AndroidRuntime(796): java.lang.IllegalStateException: Could not execute method of the activity
    10-24 06:24:48.971: E/AndroidRuntime(796): at android.view.View$1.onClick(View.java:3633)
    10-24 06:24:48.971: E/AndroidRuntime(796): at android.view.View.performClick(View.java:4240)
    10-24 06:24:48.971: E/AndroidRuntime(796): at android.view.View$PerformClick.run(View.java:17721)
    10-24 06:24:48.971: E/AndroidRuntime(796): at android.os.Handler.handleCallback(Handler.java:730)
    10-24 06:24:48.971: E/AndroidRuntime(796): at android.os.Handler.dispatchMessage(Handler.java:92)
    10-24 06:24:48.971: E/AndroidRuntime(796): at android.os.Looper.loop(Looper.java:137)
    10-24 06:24:48.971: E/AndroidRuntime(796): at android.app.ActivityThread.main(ActivityThread.java:5103)
    10-24 06:24:48.971: E/AndroidRuntime(796): at java.lang.reflect.Method.invokeNative(Native Method)
    10-24 06:24:48.971: E/AndroidRuntime(796): at java.lang.reflect.Method.invoke(Method.java:525)
    10-24 06:24:48.971: E/AndroidRuntime(796): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    10-24 06:24:48.971: E/AndroidRuntime(796): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    10-24 06:24:48.971: E/AndroidRuntime(796): at dalvik.system.NativeStart.main(Native Method)
    10-24 06:24:48.971: E/AndroidRuntime(796): Caused by: java.lang.reflect.InvocationTargetException
    10-24 06:24:48.971: E/AndroidRuntime(796): at java.lang.reflect.Method.invokeNative(Native Method)
    10-24 06:24:48.971: E/AndroidRuntime(796): at java.lang.reflect.Method.invoke(Method.java:525)
    10-24 06:24:48.971: E/AndroidRuntime(796): at android.view.View$1.onClick(View.java:3628)
    10-24 06:24:48.971: E/AndroidRuntime(796): ... 11 more
    10-24 06:24:48.971: E/AndroidRuntime(796): Caused by: java.lang.NullPointerException
    10-24 06:24:48.971: E/AndroidRuntime(796): at com.example.montest.Main.MultipleButton(Main.java:90)
    10-24 06:24:48.971: E/AndroidRuntime(796): ... 14 more
    10-24 06:24:55.021: I/Process(796): Sending signal. PID: 796 SIG: 9
    J'ai recorrigé Mahoney merci, mais es tu sûr que je dois incrémenter seulement après mon if? Parce que je veux qu'il arrête d'incrémenter a partir du moment ou la condition if est vrai en faite.

    Hephaistos007 j'avais fais un test pour afficher le contenu de mon tabtxt à la position 1 de mon tableau en l'affichant dans le textview à la position 0, et voila ce qu'il m'avait rendu:
    Code pour afficher le contenu de tabtxt[1]:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    txtv0.setText(tabtxt[1].getText());
    Code de contenu du Textview à la position [1] en XML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <TextView
                            android:id="@+id/textView1"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:text="Bug" />
    Et le Logcat lorsque je clique sur le bouton:
    10-24 07:05:23.881: E/AndroidRuntime(1151): FATAL EXCEPTION: main
    10-24 07:05:23.881: E/AndroidRuntime(1151): java.lang.IllegalStateException: Could not execute method of the activity
    10-24 07:05:23.881: E/AndroidRuntime(1151): at android.view.View$1.onClick(View.java:3633)
    10-24 07:05:23.881: E/AndroidRuntime(1151): at android.view.View.performClick(View.java:4240)
    10-24 07:05:23.881: E/AndroidRuntime(1151): at android.view.View$PerformClick.run(View.java:17721)
    10-24 07:05:23.881: E/AndroidRuntime(1151): at android.os.Handler.handleCallback(Handler.java:730)
    10-24 07:05:23.881: E/AndroidRuntime(1151): at android.os.Handler.dispatchMessage(Handler.java:92)
    10-24 07:05:23.881: E/AndroidRuntime(1151): at android.os.Looper.loop(Looper.java:137)
    10-24 07:05:23.881: E/AndroidRuntime(1151): at android.app.ActivityThread.main(ActivityThread.java:5103)
    10-24 07:05:23.881: E/AndroidRuntime(1151): at java.lang.reflect.Method.invokeNative(Native Method)
    10-24 07:05:23.881: E/AndroidRuntime(1151): at java.lang.reflect.Method.invoke(Method.java:525)
    10-24 07:05:23.881: E/AndroidRuntime(1151): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    10-24 07:05:23.881: E/AndroidRuntime(1151): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    10-24 07:05:23.881: E/AndroidRuntime(1151): at dalvik.system.NativeStart.main(Native Method)
    10-24 07:05:23.881: E/AndroidRuntime(1151): Caused by: java.lang.reflect.InvocationTargetException
    10-24 07:05:23.881: E/AndroidRuntime(1151): at java.lang.reflect.Method.invokeNative(Native Method)
    10-24 07:05:23.881: E/AndroidRuntime(1151): at java.lang.reflect.Method.invoke(Method.java:525)
    10-24 07:05:23.881: E/AndroidRuntime(1151): at android.view.View$1.onClick(View.java:3628)
    10-24 07:05:23.881: E/AndroidRuntime(1151): ... 11 more
    10-24 07:05:23.881: E/AndroidRuntime(1151): Caused by: java.lang.NullPointerException
    10-24 07:05:23.881: E/AndroidRuntime(1151): at com.example.montest.Main.MultipleButton(Main.java:87)
    10-24 07:05:23.881: E/AndroidRuntime(1151): ... 14 more
    10-24 07:05:25.882: I/Process(1151): Sending signal. PID: 1151 SIG: 9
    Voila, j'ai un peu du mal à lire les Logcats pour le moment alors si vous pouvez me filer un coup de main ce serait sympathique.

    Merci encore de votre aide.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 5
    Points : 11
    Points
    11
    Par défaut
    Au temps pour moi, je me suis emmêlé les pinceaux
    Donc si tu veux stopper la boucle, fais juste un break, sinon tu vas vraiment avoir des soucis avec ton index :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while(i < tabtxt.length){
    	if(tabtxt[i].getText().toString().length() == 0) {
    		tabtxt[i].setText(nom);
    		break;
    	i++;
    }
    Ensuite pour ton erreur, regarde dans ton OnCreate : tu as l'air de vouloir affecter tes txtv0/v1/v3 après les avoir affectés à ton tableau, et tant qu'à y être, inutile de passer par ces 3 variables, tu peux affecter tes textview directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    protected void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	setContentView(R.layout.activity_main);
     
    	tabtxt[0] = (TextView)findViewById(R.id.textView0);
    	tabtxt[1] = (TextView)findViewById(R.id.textView1);
    	tabtxt[2] = (TextView)findViewById(R.id.textView3);
     
    }

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Ca fonctionne Mahoney merci !

    J'avais juste oublié d'affecter les Textviews au tableau tabtxt[] par les findViewsByID directement, au lieu de faire le lien par la suite, ce pourquoi il ne comprenait pas le référencement de mes Textviews et que lors de mes tests pour afficher un élément à la position [X] de mon tabtxt, l'application faisait un crash !

    @Hephaistos007: J'ai vu que tu avais écris des tutoriels sur Android, en aurais-tu fais un sur le LogCat par hasard ? Parce qu'actuellement pour le comprendre, c'est un petit peu compliqué pour moi...
    Merci à toi aussi de t'être pencher sur mon problème.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/10/2009, 10h05
  2. [MySQL] Problème de boucle en récupérant les données dans un tableau
    Par Iratec dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/10/2009, 18h03
  3. Création d'un tableau simple et problème de boucles
    Par BOU59000 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 17/06/2009, 15h00
  4. Réponses: 3
    Dernier message: 11/01/2006, 17h44
  5. problème d'affectation de tableau ...
    Par Mike888 dans le forum C
    Réponses: 23
    Dernier message: 26/02/2005, 14h52

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