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 :

Un souci avec mes variables


Sujet :

Android

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Par défaut Un souci avec mes variables
    Bonjour

    j'ai un souci pour récupérer mes variables.
    Dans ma première activité je les récupère bien en interrogeant ma banque de donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Cursor c = database.query("test", new String[]{"_id,"action1","descri1","action2","descri2","action3","descri3"}
    , "surnom LIKE ?" ,new String[]{spot1+"%"}, null, null, null);
     
     
    while(c.moveToNext())
      {
    	String action1 	= c.getString(2);
    	String descri1 	= c.getString(3);
    	String action2 	= c.getString(4);
    	String descri2 	= c.getString(5);
    	String action3 	= c.getString(6);
    	String descri3 	= c.getString(7);
    je les affiche correctement dans mes textview ce qui montre qu'elle fonctionnent bien.

    Par contre quand j'essaie de les envoyer via un bouton bien évidement rien ne passe je n'arrive pas à les intégrer dans la variable que j'envoie puisqu'elles sont déclarer dans mon public oncreate et non mon public void addlistene...

    Comment fait on pour les faire passer? Je sais ca doit être basique mais je sèche.... alors merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void addListenerOnButton1a() {
     button = (Button) findViewById(R.id.boutona1);
     button.setOnClickListener(new OnClickListener() {
         @Override
         public void onClick(View arg0) {
         Intent intent = new Intent(getApplicationContext(),ActionWeb.class);  
         intent.putExtra("zid", "yes:"+action1);
    			    startActivity(intent);
    	         }
    	});
    	}

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 129
    Par défaut
    Déclare des variables en final

  3. #3
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par nico_nico95 Voir le message
    Déclare des variables en final


    Heu je ne vois pas trop ce que le "final" peut apporter ici. Le mot clé "final" est uniquement un "hint" donné au compilateur pour lui dire: la valeur ne sera plus jamais changée, et ne permet en rien de modifier la durée de vie des variables.
    (il y a même quelques études qui montrent que l'utilisation de "final" n'apporte rien en terme de rapidité).

    Alors bien sur dans le cas de classes anonymes, eclipse propose l'utilisation de "final":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String avalue = xxxxxx;
    setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
               v.setText(avalue);
        }
    }
    La durée de vie de "avalue" n'est pas suffisante pour permettre à la fonction onClick de l'utiliser.
    Eclipse propose d'utiliser "final" qui permet au compilateur de transformer le code en (grosso-modo):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String avalue = xxxxxx;
    setOnClickListener(new OnClickListener() {
           String lvalue = avalus;
           public void onClick(View v) {
               v.setText(lvalue);
           }
    }
    Mais c'est tout...

    Dans le code présenté à la question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    while(c.moveToNext())
      {
    	String action1 	= c.getString(2);
    	String descri1 	= c.getString(3);
    	String action2 	= c.getString(4);
    	String descri2 	= c.getString(5);
    	String action3 	= c.getString(6);
    	String descri3 	= c.getString(7);
    La durée de vie de "action1" est limité au contenu de la boucle while, il faut donc l'en sortir d'une manière ou d'une autre.
    Socker la valeur au niveau de l'activité, ou bien de toute manière qui permette à la valeur de restée vivante jusqu'à l'execution du listener.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Par défaut
    je crois bien avoir compris que la valeur de mon "action1" est limitée à la boucle et j'ai donc testé final String action1 = "test"; mais la aussi cela me donne un null dans le clicklistener...

    J'ai ensuite essayé de déclarer une variable action1 en espérant que le final dans la boucle lui atrribuerait la valeur définitive mais là encore j'ai valeur nulle.
    Comment peut on donc "sortir" la valeur de la boucle pour qu'elle soit utiliseable dans la fonction onclick ?

    Je peux bien sur récupérer la valeur que j'ai utilisé pour pour générer la valeur d'action1 dans ma nouvelle classe mais je ne vois pas pourquoi il faudrait qu'à chaque classe je refasse appel à la banque de donnée, n'y a t'il pas un moyen de "sortir" les valeurs voulues et ensuite les utiliser librement?

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Par défaut
    bonjour,

    je suis peut être a coté de la plaque mais je me lance:

    pourquoi ne pas utiliser de variable de classe ? :

    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
    public class TaClasse extends OuPas{
     
    	String action1;
    	String descri1;
            [...]
     
    protected void onCreate(Bundle savedInstanceState) {
     
    [...]
    Cursor c = database.query("test", new String[]{"_id,"action1","descri1","action2","descri2","action3","descri3}
    , "surnom LIKE ?" ,new String[]{spot1+"%"}, null, null, null);
     
     
    while(c.moveToNext())
      {
    	action1 = c.getString(2);
    	descri1 = c.getString(3);
            [...]
      }
    }
     
    public void addListenerOnButton1a() {
     button = (Button) findViewById(R.id.boutona1);
     button.setOnClickListener(new OnClickListener() {
         @Override
         public void onClick(View arg0) {
         Intent intent = new Intent(getApplicationContext(),ActionWeb.class);  
         intent.putExtra("zid", "yes:"+action1);
    			    startActivity(intent);
    	         }
    	});
    	}

    à tester.

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Par défaut
    je suis d'accord avec yrtera, j'ai déjà eu le même problème, et cette solution m'a permis de le résoudre.
    Et pour le mot clé final comme l'a précisé nicroman plus haut, il permet de dire que c'est une constante, et que sa valeur ne changera pas, mais elle n'agit pas sur la portée de la variable.
    je pense donc que si tu déclare une variable final dans un bloc while, cette variable sera constante, et local à while.

Discussions similaires

  1. Souci avec les variables de session
    Par Mike888 dans le forum Services Web
    Réponses: 5
    Dernier message: 21/09/2007, 22h35
  2. Souci avec une variable dans une requete
    Par polianita dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 21/06/2006, 17h05
  3. soucis avec MAX(variable de type varchar)
    Par littledoudou dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/04/2006, 19h07
  4. erreur divers avec mes variables
    Par TheBlackReverand dans le forum MFC
    Réponses: 11
    Dernier message: 21/03/2006, 22h40
  5. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 13h45

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