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 :

Erreur lors de la recupération d'Intent


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Etudiant en reseaux
    Inscrit en
    Janvier 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Etudiant en reseaux

    Informations forums :
    Inscription : Janvier 2013
    Messages : 35
    Points : 23
    Points
    23
    Par défaut Erreur lors de la recupération d'Intent
    Bonjour à tous, voila je voulais développer un mini-jeu de math sous android, mais j'ai un problème lors de la récupération de certaine données avec mon intent, mon code n'est surement pas optimisée j’espère que vous serez indulgent pour ceci
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    package com.example.assignement;
     
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.AlertDialog.Builder;
    import android.app.Dialog;
    import android.content.DialogInterface;
    import android.content.DialogInterface.OnClickListener;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
     
    public class SecondActivity extends Activity {
     
    	int a,b,result,good,i ;
    	String childresult,realresult,goodstring,istring ;
    	protected void onCreate(Bundle savedInstanceState) {
     
     
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_second);
     
    		a = (int) (Math.random()*10 +1);
    		b = (int) (Math.random()*10 +1);
    		result = a + b ;
    		final EditText value = (EditText) findViewById(R.id.editText1);
    		TextView loginDisplay = (TextView) findViewById(R.id.textView1);
     
     
    	    Intent intent = getIntent();
     
     
    		if (intent != null) {
     
    	      int realresult2 = Integer.parseInt(intent.getStringExtra(realresult)); 
    			   int childresult2 = Integer.parseInt(intent.getStringExtra(childresult));
    			   int goodscore = Integer.parseInt(intent.getStringExtra(goodstring));
    			   int iscore = Integer.parseInt(intent.getStringExtra(istring));
     
    			   if (childresult2 == realresult2)
    				   {
     
    				   good = goodscore +1 ;
    				    i = iscore +1;
    				    loginDisplay.setText(+a+"+"+b+"= ?  || score ="+good+"/"+i );
    				    }
     
    			   else
    				   {
    				   good = goodscore ;
    				    i = iscore +1;
    				    loginDisplay.setText(+a+"+"+b+"= ?  || score ="+good+"/"+i ); 
    				    }
     
     
     
    			  	loginDisplay.setText(+a+"+"+b+"= ?" );
     
     
     
     
    				}
     
    		else 
    				{
     
    			good = 0 ;
     
    			i = 0;
    			loginDisplay.setText(+a+"+"+b+"= ?" );
    				}
     
     
     
     
     
     
    		Button startButton = (Button) findViewById(R.id.button2);
    		startButton.setOnClickListener(new View.OnClickListener(){
     
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				Intent intent2 = new Intent(SecondActivity.this, SecondActivity.class);
    				intent2.putExtra(childresult, value.getText().toString());
    				intent2.putExtra(realresult, result);
    				intent2.putExtra(goodstring, good);
    				intent2.putExtra(istring, i);
    				startActivity(intent2);
    			}
     
    		} );	
     
     
     
     
     
     
     
    			Button backButton = (Button) findViewById(R.id.button1);
    		backButton.setOnClickListener(new View.OnClickListener(){
     
    			@Override
    			public void onClick(View v) {
    			//	 TODO Auto-generated method stub
     
    				back();
    			}
     
     
    		} );
     
     
     
     
     
     
     
    	}
     
     
     
     
     
    	private void back() {
    			// We back into the menu
    			Intent backactivity = new Intent(this,MainActivity.class);
    			startActivity(backactivity);
    		}
     
     
     
    }

    Je me retrouve avec une erreur comme ceci

    http://www.hostingpics.net/viewer.ph...6210erreur.jpg


    Donc je viens de me rendre compte que l'erreur vient de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          int realresult2 = Integer.parseInt(intent.getStringExtra(realresult)); 
    			   int childresult2 = Integer.parseInt(intent.getStringExtra(childresult));
    			   int goodscore = Integer.parseInt(intent.getStringExtra(goodstring));
    			   int iscore = Integer.parseInt(intent.getStringExtra(istring));
    Car meme si je n'ai rien envoyer je rentre dans la boucle une idée comment faire ?

  2. #2
    Membre à l'essai
    Homme Profil pro
    Etudiant en reseaux
    Inscrit en
    Janvier 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Etudiant en reseaux

    Informations forums :
    Inscription : Janvier 2013
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Probleme resolu, j'avais juste oublier de convertir mes int en string, désolé du derangement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	intent2.putExtra(realresult, Integer.toString(result));
    				intent2.putExtra(goodstring, Integer.toString(good));
    				intent2.putExtra(istring, Integer.toString(i));

  3. #3
    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
    Euh... tu sais que tu peux directement donner tes int ?

    Si d'un coté tu fais une conversion int => String, et qu'à la réception, tu fais une conversion String => int... à quoi sert la conversion ? Pourquoi ne pas juste transmettre et manipuler des int ?

    putExtra peut prendre un int (en plus de la clef), et tu as getExtraInt.
    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

  4. #4
    Membre à l'essai
    Homme Profil pro
    Etudiant en reseaux
    Inscrit en
    Janvier 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Etudiant en reseaux

    Informations forums :
    Inscription : Janvier 2013
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Si tu peux donner plus de precision sur le putInextra ?


    Sinon j'ai un autre probleme, voici ma première classe qui initialise les valeur good et i pour pouvoir avoir un systeme de score
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    package com.example.assignement;
     
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.AlertDialog.Builder;
    import android.app.Dialog;
    import android.content.DialogInterface;
    import android.content.DialogInterface.OnClickListener;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
     
    public class SecondActivity extends Activity {
     
    	 int a,b,result,good,i,o ;
    	final String childresult="0";
    	final String realresult="1";
    	final String istring="1";
    	final String goodstring="0";
    	protected void onCreate(Bundle savedInstanceState) {
     
     
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_second);
     
    		a = (int) (Math.random()*10 +1);
    		b = (int) (Math.random()*10 +1);
    		result = a + b ;
     
    		final EditText value = (EditText) findViewById(R.id.editText1);
     
    		TextView loginDisplay = (TextView) findViewById(R.id.textView1);
     
     
    			  good = 0 ;
     
    			  i = 0;
    			loginDisplay.setText(+a+"+"+b+"= ? " );
     
     
     
     
     
     
    		Button startButton = (Button) findViewById(R.id.button2);
    		  startButton.setOnClickListener(new View.OnClickListener(){
     
    			@Override
    				public void onClick(View v) {
    				// TODO Auto-generated method stub
    				Intent intent2 = new Intent(SecondActivity.this, GameActivity.class);
    				intent2.putExtra(childresult, value.getText().toString());
    				intent2.putExtra(realresult, Integer.toString(result));
    				intent2.putExtra(goodstring, Integer.toString(good));
    				intent2.putExtra(istring, Integer.toString(i));
     
     
    				startActivity(intent2);
    				}
     
    				} );	
     
     
     
     
     
     
     
    			Button backButton = (Button) findViewById(R.id.button1);
    		backButton.setOnClickListener(new View.OnClickListener(){
     
    			@Override
    			public void onClick(View v) {
    			//	 TODO Auto-generated method stub
     
    				back();
    			}
     
     
    		} );
     
     
     
     
     
     
     
    	}
     
     
     
     
     
    	private void back() {
    			// We back into the menu
    			Intent backactivity = new Intent(this,MainActivity.class);
    			startActivity(backactivity);
    		}
     
     
     
    }
    Donc j'envoye ces données sur mon autre activité mais à part ma variable good, je n'arrive pas à recuperer les autres variable
    Voici le code de la 2eme activité

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    package com.example.assignement;
     
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.AlertDialog.Builder;
    import android.app.Dialog;
    import android.content.DialogInterface;
    import android.content.DialogInterface.OnClickListener;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
     
    public class GameActivity extends Activity {
     
    	int a,b,result,good,i,o ;
    	final String childresult="0";
    	final String realresult="0";
    	final String istring="0";
    	final String goodstring="0";
     
    	protected void onCreate(Bundle savedInstanceState) {
     
     
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_second);
     
    		a = (int) (Math.random()*10 +1);
    		b = (int) (Math.random()*10 +1);
    		result = a + b ;
     
    		final EditText value = (EditText) findViewById(R.id.editText1);
     
    		TextView loginDisplay = (TextView) findViewById(R.id.textView1);
    		  Intent intent = getIntent();
     
     
     
     
     
    			  int real = Integer.parseInt(intent.getStringExtra(realresult)); 
    			  int result2 = Integer.parseInt(intent.getStringExtra(childresult));
    		  int goodscore = Integer.parseInt(intent.getStringExtra(goodstring));
    			int iscore = Integer.parseInt(intent.getStringExtra(istring));
     
     
     
     
    			   if (result2 == real)
    			   {
     
    	 				   good = goodscore +1 ;
    	 				   i = iscore +1;
    			  loginDisplay.setText(+a+"+"+b+"= ?  || score ="+good+"/"+i );
     
     
    	 		  }
     
    	 		   else
    	 		   {
     
    	 		  good = goodscore ;
    	 		  i = iscore +1;
    	 		  loginDisplay.setText(+a+"+"+b+"= ?  ||  score ="+good+"/"+i); 
     
    	 		 }
     
     
     
     
     
     
     
    		Button startButton = (Button) findViewById(R.id.button2);
    		  startButton.setOnClickListener(new View.OnClickListener(){
     
    			@Override
    				public void onClick(View v) {
    				// TODO Auto-generated method stub
    				Intent intent2 = new Intent(GameActivity.this, GameActivity.class);
    				intent2.putExtra(childresult, value.getText().toString());
    				intent2.putExtra(realresult, Integer.toString(result));
    				intent2.putExtra(goodstring, Integer.toString(good));
    				intent2.putExtra(istring, Integer.toString(i));
     
    				startActivity(intent2);
    				}
     
    				} );	
     
     
     
     
     
     
     
    			Button backButton = (Button) findViewById(R.id.button1);
    		backButton.setOnClickListener(new View.OnClickListener(){
     
    			@Override
    			public void onClick(View v) {
    			//	 TODO Auto-generated method stub
     
    				back();
    			}
     
     
    		} );
     
     
     
     
     
     
     
    	}
     
     
     
     
     
    	private void back() {
    			// We back into the menu
    			Intent backactivity = new Intent(this,MainActivity.class);
    			startActivity(backactivity);
    		}
     
     
     
    }

  5. #5
    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 pense que tu n'as pas bien compris le fonctionnement des "extras"

    En fait, tu donnes à ton intent des données (objets/type primitifs) pour les transmettre à l'activité à laquelle elle est destinée.
    Chacune de ces données fournies est identifiées par une clé représentée par un objet String.

    Le fonctionnement est donc ainsi :
    - création intent
    - don d'une donnée avec un identifieur
    - création de la nouvelle activité
    - demande à l'intent de la donnée grâce à l'identifieur

    En somme, il faut que la clé soit la même des deux cotés. soit : intent.putExtra(Constant.CHILD_RESULT_KEY, childResult); pour fournir la donnée à l'intent.
    intent.getIntExtra(Constant.CHILD_RESULT_KEY, -1); pour la récupérer.

    Où Constant est une classe utilitaire servant à regrouper des constantes et CHILD_RESULT_KEY est une constante publique, une String dont la valeur n'importe pas beaucoup du moment qu'elle est unique.

    Pourquoi une constante et pas directement des valeurs en dur ? Pour ne pas avoir de souci lié aux fautes de frappes, et pour faciliter le refactoring et la ré-utilisabilité.

    Pourquoi -1 ? Cette valeur représente une valeur par défaut dans le cas où l'intent ne possède pas de donnée correspondante à la clef demandée. J'ai mis -1 au pif pour réaliser une gestion d'erreur. Pour cela, il est obligatoire que la valeur retournée par défaut ne soit pas une valeur possible à passer. C'est pour la gestion d'erreur comme dit... mais on peut très bien en faire autre chose, ça dépend de ce que tu souhaites.

    En somme : lis et comprend la documentation de ce que tu veux utiliser avant de l'utiliser

    Doc :
    https://developer.android.com/refere...g.String, int)
    https://developer.android.com/refere...g.String, int)
    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

  6. #6
    Membre à l'essai
    Homme Profil pro
    Etudiant en reseaux
    Inscrit en
    Janvier 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Etudiant en reseaux

    Informations forums :
    Inscription : Janvier 2013
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    C'est pour cette raison que je convertis, je ne sais pas reelement utiliser cette méthode avec les int.

    Par exemple :
    result = a + b ;
    intent2.putExtra(realresult, Integer.toString(result));
    Pourtant je ne parviens pas à récupérer cette valeur, pourtant j'utilise la même clé( j'ai mis ce que je pense être la clé en gras, corrige moi si je me trompe)

    int real = Integer.parseInt(intent.getStringExtra(realresult));
    Donc désolé si je n'ai pas bien compris ton explication, si tu peux peut etre rexpliquer en prenant mon exemple ?

  7. #7
    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
    Quelle est la valeur de realResult à ces deux moments ?
    Tu utilises bien cette variable comme clef... mais il faut que les deux soient égales (au sens equals/compareTo) pour que ça fonctionne
    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

  8. #8
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    final String childresult="0";
    	final String realresult="0";
    	final String istring="0";
    	final String goodstring="0";
    Vu ce code là... toute les clés sont identiques et sont "0"....

    Utilise des valeurs différentes et des constantes. Les constantes sont définies en java par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            public static final String CHILD_RESULT = "childResult";
    	public static final String REAL_RESULT="realResult";
    	public static final String IS_STRING="isString";
    	public static final String GOOD_STRING="goodString";
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/04/2011, 10h06
  2. [JComboBox] Erreur lors de la recupération d'une valeur
    Par patriot dans le forum Composants
    Réponses: 44
    Dernier message: 09/09/2010, 17h30
  3. [BO 5.1.8][IMPORT EXPORT] erreur FRM0003 lors d'une recupération document
    Par ninou58 dans le forum Administration-Migration
    Réponses: 23
    Dernier message: 16/07/2008, 14h07
  4. Erreur lors de modification d'une table
    Par seb.49 dans le forum SQL
    Réponses: 11
    Dernier message: 13/01/2003, 17h16
  5. [VB6] Erreur lors de l'ouverture d'un document Word
    Par Marco le Pouillot dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/01/2003, 09h30

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