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 :

Passages de variables


Sujet :

Android

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Passages de variables
    Bonjour à toutes et tous

    Après avoir parcouru le net , lu de nombreux de posts et suivi des tutos, je n'ai pas réussi à débboger mon (premier) programme.

    Nouveau dans la programmation Android (et ce forum), je me décide à vous soumettre mon problème.Je n'ai rien trouvé dans la FAQ qui puisse le résoudre.

    J'ai vu qu'il fallait utiliser la fonction putExtra avant startActivity pour envoyer des données d'une activity à une autre.
    Je change bien d'activité avec une Intent et ma variable est bien récupérée dans la seconde activité, puisque je peux l'afficher avec un TextView.

    Cependant, je ne peux pas l'utiliser pour effectuer un calcul : il y a un cratch !(Je pense qu'il s'agit d'un problème de type de variable).

    Ma question : est-ce que l'on peut transférer directement une variable de type Integer ou Double, saisie un EditText sans qu'elle soit convertie, ou bien bien une conversion est-elle toujours nécessaire da la seconde activité, du type String vers Double par exemple ? Comment fait-on ? Est-ce un problème d'import de classe ?

    Je vous soumets mon code et remercie sincèrement celles ou ceux qui pourront me venir en aide en me montrant où est l'erreur et éventuellement en me donnant la solution.


    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
     
    @Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		//Dans la méthode OnCreate, on définit la vue à l’aide de la méthode setContentView 
    		//et on lui affecte un R.layout.activity qui représente notre vue, déclarée dans le dossier “Layout”.
    		setContentView(R.layout.activity_select3);
     
    		//récupération de l'EditText grâce à  son ID
    		final EditText indice_saisi = (EditText) findViewById(R.id.user_indice);
     
    		//récupération du bouton LANCER LE CALCUL grâce à  son ID
    		Button calculButton = (Button) findViewById(R.id.calcul);
     
    		//on applique un écouteur d'événement au clique sur le bouton
    		  calculButton.setOnClickListener(new OnClickListener() {
     
    		  public void onClick(View v) {
    			Intent monIntent5 = new Intent(Select3Activity.this, DisplayActivity.class);
     
    			//Lors du clic sur le bouton, on récupère le texte saisi par l’utilisateur (getText().toString)
    			//Pour finir, on associe cette valeur (texte) avec l’intent déclaré précédemment (méthode putExtra)
     
    			monIntent5.putExtra(EXTRA_CALCUL, indice_saisi.getText().toString());
    			startActivity(monIntent5);
    			}
    		});	
    	}
    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
     
     
    public class DisplayActivity extends Activity {
    	//On déclare toutes les variables dont on aura besoin et initialisation
     
    			public String EXTRA_CALCUL = "user_indice";
    			public double v_base = 999;
    			public double indiceRecup = 0;	
     
    @Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_display);
     
    		//1 - RECUPERER LA VALEUR DE L'INDICE SAISI A L'ECRAN PRECEDENT
    		Intent monIntent5 = getIntent();
    				// Appel à un TextView
    	       TextView indiceDisplay = (TextView) findViewById(R.id.indice_display);
           if (monIntent5 != null) {
    	    	   //Affichage de la variable dans le Textview
    	    	   indiceDisplay.setText(monIntent5.getStringExtra(EXTRA_CALCUL));    	   
    	       }
    		   // Conversion de la varable Extra_Calcul en type Double
    	     double indiceRecup = Double.parseDouble(EXTRA_CALCUL);	  
    		   // Mon calcul
    		  double s_base = v_indice * indiceRecup; 
    		   //2 - Définir le format des nombres (Présentation avec 2 décimales avec 0 significatif)
     
    	       DecimalFormat df = new DecimalFormat("0.00");
    		   // Affichage à l'aide d'un Textview
    		   ((TextView)findViewById(R.id.base)).setText(df.format(s_base)+ " €"); 
    	}
    }
    Merci encore à qui pourra m'aider !

  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
    Si il y a un crash... il y a une exception dans le logcat... nous la fournir (avec la stacktrace associée) serait bien

    D'autre part il n'y a pas de vérification de la donnée à aucun moment, je pense que la première activité devrait vérifier le nombre dans le onClick, par exemple:
    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
     
    calculButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            String text = indice_saisi.getText().toString();
            try {
                Double.parseDouble(text);
                Intent monIntent5 = new Intent(Select3Activity.this, DisplayActivity.class);
                monIntent5.putExtra(EXTRA_CALCUL,text);
                startActivity(monIntent5);
            } catch (NumberFormatException nfe) {
                Log.d("XXXXX","Format du nombre saisi incorrect: "+text,nfe);
                // afficher un message à l'utilisateur
                Toast.makeToast(..... ).show();
            }
        }
    });
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 559
    Points
    559
    Par défaut
    Bonjour,
    au niveau de la conception, tu peux déjà indiquer qu'un EditText ne contiendra que des valeurs numériques :
    En xml :
    android:inputType="number"
    ou en java :

    txtValue.setInputType(InputType.TYPE_CLASS_NUMBER);
    Quand tu veux récupérer la valeur de ton EditText txtValue en tant qu'entier :
    int val=Integer.parseInt(txtValue.getText().toString()))
    et Double.parseDouble(...) pour un double...

    Si tu veux passer cette valeur entière à une autre activité, en utilisant la version surchargée putExtra(String, int) :
    monIntent.putExtra("intVariable", val);
    Pour récupérer cette valeur entière dans l'autre activité :
    int valRecup=monIntentRec.getIntExtra("intVariable", 0);
    tu as bien entendu aussi putExtra(String, double) et getDoubleExtra(...)

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Message d'erreur
    Merci pour vos réponses.

    J'y vais toujours à taton. Je teste vos solutions... Et voici ce que j'ai :
    "La méthode getText() est indéfinie pour le type String"

    Qu'est-ce que cela signifie ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 559
    Points
    559
    Par défaut
    Dans mon code mis en exemple, txtValue est un EditText, pas un String ,
    par exemple :
    EditText txtValue=(EditText) findViewById(R.id.unId);

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Pour le contrôle de la saisie dans le xml avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    android:inputType="number"
    puis les lignes suivantes dans ma première activity :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //Si le champs est vide, alors on affiche l'erreur
    if (indice_saisi == "") {
    Toast.makeText(Select3Activity.this, R.string.indice_empty, Toast.LENGTH_SHORT).show();
    				return;
    Ca c'est OK.

    Pour le reste, toujours au point mort ! Ca commence à me prendre la tête...

    J'ai essayé les solutions proposées, rien à faire... Avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int EXTRA_CALCUL=Integer.parseInt(indice_saisi.getText().toString); 
     
    Intent monIntent5 = new Intent(Select3Activity.this, PaieDisplayActivity.class);
     
    monIntent5.putExtra(EXTRA_CALCUL, indice_saisi.getText().toString());
    		startActivity(monIntent5);

    J'ai le message : "toString ne peut pas être résolu ou n'est pas un champ" ou bien "La méthode putExtra(String, boolean) du type Intent ne s'applique pas aux arguments (int, String)"

    Merci pour votre aide

  7. #7
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 559
    Points
    559
    Par défaut
    le putExtra(nomVariable,valeur) te permet de passer une variable :
    • le premier paramètre nomVariable étant de type String et correspondant au nom que tu veux donner à ta variable (c'est grâce à ce nom que tu pourras la récupérer dans l'autre activité)
    • Le second valeur est la valeur (de type variable : string, boolean, int, double...) que tu veux passer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int calcul=Integer.parseInt(indice_saisi.getText().toString); 
    Intent monIntent5 = new Intent(Select3Activity.this, PaieDisplayActivity.class);			
    monIntent5.putExtra("resultatDeMonCalcul", calcul);
    startActivity(monIntent5);
    dans l'autre activité, tu feras par exemple :
    int valRecup=monIntentRec.getIntExtra("resultatDeMonCalcul", 0);

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Toujours un plantage !
    Encore merci pour votre coopération. Je commence à être décourager...

    Pour vous aider à y voir plus clair, voici le log (moi je n'y comprend rien) :
    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
     
    02-20 19:43:51.029: E/AndroidRuntime(1094): FATAL EXCEPTION: main
    02-20 19:43:51.029: E/AndroidRuntime(1094): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.darbosoft.carriere.free/com.darbosoft.carriere.free.Select3Activity}: java.lang.NumberFormatException: unable to parse '' as integer
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at android.os.Looper.loop(Looper.java:123)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at android.app.ActivityThread.main(ActivityThread.java:4627)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at java.lang.reflect.Method.invokeNative(Native Method)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at java.lang.reflect.Method.invoke(Method.java:521)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at dalvik.system.NativeStart.main(Native Method)
    02-20 19:43:51.029: E/AndroidRuntime(1094): Caused by: java.lang.NumberFormatException: unable to parse '' as integer
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at java.lang.Integer.parseInt(Integer.java:412)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at java.lang.Integer.parseInt(Integer.java:382)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at java.lang.Integer.valueOf(Integer.java:682)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at com.darbosoft.carriere.free.Select3Activity.onCreate(Select3Activity.java:32)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    02-20 19:43:51.029: E/AndroidRuntime(1094): 	... 11 more
    02-20 19:43:55.491: I/Process(1094): Sending signal. PID: 1094 SIG: 9
    Décidément je suis vraiment nul : pourtant j'ai fait une grande partie de mon application avec 13 activity (c'est peut-être pour ça : le n° me porte la poisse... Pourtant j'habite au n° 13 ¨depuis 30 ans !!! Et j'ai bientôt 60 ans...).

    Certes je suis un débutant et il n'est jamais trop tard pour apprendre (j'ai appris il y a une vingtaine d'année le DOS, les fichiers batch, le QuickBasic et un peu le TurboPascal !!!) Mais tout ceci n'a plus rien à voir... c'était au temps des dinosaures, au début de l'ère des PC !

    Cordialement

  9. #9
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 559
    Points
    559
    Par défaut
    Dans l'activité 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Intent monIntent5 = new Intent(Select3Activity.this, DisplayActivity.class);
    try {
    	Double val=Double.parseDouble(indice_saisi.getText().toString());
    	monIntent5.putExtra(EXTRA_CALCUL,val);
    	startActivity(monIntent5);
    } catch (NumberFormatException nfe) {
    	Log.d("XXXXX","Format du nombre saisi incorrect: "+text,nfe);
    	Toast.makeToast(..... ).show();
    }
    Valeur récupérée dans l'activité 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double valRecup=monIntentRec.getDoubleExtra(EXTRA_CALCUL, 0);
    je ne sais plus trop où tu en es de tes essais...

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Enfin ca marche !
    Etant de nature acharné, je n'aurai pas pu m'endormir sur un échec.

    J'ai réussi à solutionner mon problème (sur lequel je planche depuis trois jours !) en utilisant un objet Bundle, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // objet qui va nous permettre de passer des variables ici la variable passInfo 
                   Bundle objetbunble = new Bundle();
                  objetbunble.putString("passInfo",textchampsaisie.getText().toString());
                  // on passe notre objet a notre activity
                  defineIntent.putExtras(objetbunble );
    Solution trouvée en suivant un tuto trouvé sur un autre site.

    Alors pourquoi celle-ci marche et pas les autres : mystère !

    Merci encore à kox2ee et à nicroman qui ont pris la peine d'étudier ma question et de me répondre en toute sympathie.

    A une prochaine fois très certainement
    Cordialement

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

Discussions similaires

  1. [langage] Probleme passage de variables entre modules
    Par Ludo167 dans le forum Langage
    Réponses: 4
    Dernier message: 13/08/2004, 12h25
  2. Passage de variable dans un lien asp
    Par VirginieGE dans le forum ASP
    Réponses: 4
    Dernier message: 27/07/2004, 10h06
  3. [Kylix] passage de variable en Libc
    Par zheng dans le forum EDI
    Réponses: 11
    Dernier message: 06/05/2004, 14h14
  4. Passage de variable par methode post ?
    Par oazar dans le forum Flash
    Réponses: 33
    Dernier message: 16/10/2003, 17h03
  5. [langage] Passage de variables...
    Par martijan dans le forum Langage
    Réponses: 8
    Dernier message: 30/07/2003, 09h48

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