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 Studio Java Discussion :

Traiter valeur d'un TextView dans Android Studio


Sujet :

Android Studio Java

  1. #1
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut Traiter valeur d'un TextView dans Android Studio
    Bonjour à tous,

    Je débute dans la création d'une petite appli android. J'ai un TextView_COM qui reçoit toutes les secondes des valeurs entre balises comme ceci :

    <A>1592<A>
    <B>490<B>
    <C>4500<C>

    J'aimerai extraire chaque valeurs pour les afficher dans un TextView_A pour la valeur entre balise A, TextView_B pour la valeur entre balise B ect...

    Quelle serait la meilleure solution ?

    Je peux également avoir ces balises pour différencier le début et fin :
    <A>1592</A>
    <B>490</B>
    <C>4500</C>

    Vous remerciant par avance pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 475
    Points : 586
    Points
    586
    Par défaut
    Pour moi, le plus simple serait un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String text = TextView_COM.getText();
     
    String textA  = text.substring(text.indexOf("A") + 2, text.lastIndexOf("A") - 1)
    String textB  = text.substring(text.indexOf("B") + 2, text.lastIndexOf("B") - 1)
    String textC  = text.substring(text.indexOf("C") + 2, text.lastIndexOf("C") - 1)
    Bien sur, ce sont des String, donc à transformer en entier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int a = Integer.parseInt(textA);
    int b = Integer.parseInt(textB);
    int c = Integer.parseInt(textC);

  3. #3
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par Turvy Voir le message
    Pour moi, le plus simple serait un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String text = TextView_COM.getText();
     
    String textA  = text.substring(text.indexOf("A") + 2, text.lastIndexOf("A") - 1)
    String textB  = text.substring(text.indexOf("B") + 2, text.lastIndexOf("B") - 1)
    String textC  = text.substring(text.indexOf("C") + 2, text.lastIndexOf("C") - 1)
    Bien sur, ce sont des String, donc à transformer en entier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int a = Integer.parseInt(textA);
    int b = Integer.parseInt(textB);
    int c = Integer.parseInt(textC);

    Bonjour Turvy et merci infiniment pour ta réponse qui à l'air plutôt pas mal

    Alors j'ai testé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String text = TextView_COM.getText();
     
    String textA  = text.substring(text.indexOf("A") + 2, text.lastIndexOf("A") - 1)
    int a = Integer.parseInt(textA);
    mais l'application plante au lancement et ce ferme

    Puis j'ai essayer juste cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String text = TextView_COM.getText();
     
    String textA  = text.substring(text.indexOf("A") + 2, text.lastIndexOf("A") - 1)
    Et là j'obtiens le résultat suivant : 1592<A>

    Du coup j'aimerai comprendre comment enlever la dernière balise qui est surement lier au text.lastIndexOf("A") - 1

    Pourquoi +2 sur la 1ere balise et pourquoi -1 sur la denière balise ?
    Merci pour tes lumières

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 475
    Points : 586
    Points
    586
    Par défaut
    Si textA te renvoie 1592<A>, c'est normal que le parsing plante. Il essaie de transformer un texte en entier alors que ce dernier ne contient pas que des chiffres.

    Pourquoi +2 sur la 1ere balise et pourquoi -1 sur la denière balise ?
    Quand tu fais text.indexOf("A"), tu obtiens l'indice de la lettre A. Hors on veut celui du premier chiffre, donc text.indexOf("A") + 1 retourne l'indice de > et text.indexOf("A") + 2 celui du premier chiffre. De même avec text.lastIndexOf("A") - 1 où l'on cherche à avoir l'indice du < juste avant le dernier chiffre. T'auras plus d'explication en allant sur la doc https://developer.android.com/refere...ng/String.html

    Par contre, pourquoi ca renvoie 1592<A> et pas 1592 ? J'avoue ne pas savoir. C'est comme si ton text contenait ca : "<A>1592<A><A".
    Tu peux tenter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String textA  = text.substring(text.indexOf("A") + 2, text.lastIndexOf("<A>") - 1)
    mais pas sur que ca change quoique ce soit si ton text n'est pas celui prévu

  5. #5
    Membre du Club
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par Turvy Voir le message
    Si textA te renvoie 1592<A>, c'est normal que le parsing plante. Il essaie de transformer un texte en entier alors que ce dernier ne contient pas que des chiffres.


    Quand tu fais text.indexOf("A"), tu obtiens l'indice de la lettre A. Hors on veut celui du premier chiffre, donc text.indexOf("A") + 1 retourne l'indice de > et text.indexOf("A") + 2 celui du premier chiffre. De même avec text.lastIndexOf("A") - 1 où l'on cherche à avoir l'indice du < juste avant le dernier chiffre. T'auras plus d'explication en allant sur la doc https://developer.android.com/refere...ng/String.html

    Par contre, pourquoi ca renvoie 1592<A> et pas 1592 ? J'avoue ne pas savoir. C'est comme si ton text contenait ca : "<A>1592<A><A".
    Tu peux tenter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String textA  = text.substring(text.indexOf("A") + 2, text.lastIndexOf("<A>") - 1)
    mais pas sur que ca change quoique ce soit si ton text n'est pas celui prévu

    Super merci pour les explications
    je comprend mieux maintenant le +2 et moins -1 et j'en comprend la logique
    Oui pour le bug de la balise restante je n'arrive pas à l'expliqué pourtant je n'ai pas <A>1592<A><A mais bien <A>1592<A>

    Ce que je constate c'est qu'en changeant la lettre du balisage par exemple <U>1592<U> je n'ai plus ce bug et ton exemple fonctionne à merveille !
    C'est incompréhensible lol

    Merci beaucoup pour l'aide !

  6. #6
    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 : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Je passerai plutôt par une expression régulière (regex) pour être plus générique.
    Ici, le pattern est toujours le même, donc celui-ci serait ^<\w+>(.*?)</?\w+>$.
    Avec explications :
    • ^ : commence par
    • <\w+> = <[a-zA-Z0-9]+> : débute par un chevron ouvrant, puis une chaîne de caractères alphanumériques de casse quelconque ayant "au moins un caractère" (ça, c'est le "+") et terminé par un chevron fermant
    • (.*?) : n'importe quoi ( '.' ) de 0 à n fois ( '*' ) en non-gourmand ( '*?' ), que l'on capture ( '(' et ')' ) pour pouvoir réutiliser ensuite
    • </?\w+> = </?[a-zA-Z0-9]+> : débute par un chevron ouvert, est suivi de 0 ou 1 ( '?' ) slash, puis une chaîne de caractères alphanumériques de casse quelconque ayant "au moins un caractère" et terminé par un chevron fermant
    • $ : finit par


    Pour l'utilisation en Java, ça donnerait un truc comme ça (non testé) :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String value = "<A>1515</A>";
    Pattern pattern = Pattern.compile("^<\\w+>(.*?)</?\\w+>$");
    Matcher matcher = pattern.matcher(value);
    Log.i(m.group(1));

    Aide : http://cyberzoide.developpez.com/tutoriels/java/regex/
    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

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/05/2017, 02h22
  2. Réponses: 0
    Dernier message: 12/06/2015, 12h01
  3. Déterminer la Valeur la plus grande dans une table
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 9
    Dernier message: 22/08/2014, 23h35
  4. récupérer la valeur du 2ème champ dans un DBLookUpListBox
    Par jakouz dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/07/2004, 16h45
  5. Valeur par defaut 'True' dans un champ de type bit
    Par Mouse dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/03/2003, 15h26

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