Aller au contenu

Je tape sur le bouton, rien ne se passe[Résolu]


androniennn

Recommended Posts

Bonsoir,

Je ne sais pas pourquoi le résultat ne s'affiche pas dans le champ texte(cons) lors du tape sur le bouton, voici le code:

public void calcul ()
{
  final EditText vol;
  final EditText kil;
  final EditText cons;

  vol = (EditText) findViewById(R.id.volume2);
  kil= (EditText) findViewById(R.id.kilometrage2);
  cons= (EditText) findViewById(R.id.consom);

final Button button = (Button) findViewById(R.id.button);

     button.setOnClickListener(new View.OnClickListener() {
   	  	public void onClick(View v) {
   	  		int q1=Integer.parseInt(vol.getText().toString());
   	  		int q2=Integer.parseInt(kil.getText().toString());
   	  		int x;
   	  	  	x=q1 + q2;
   	  		cons.setText(x);
       	  }
     });
     }

C'est quoi le problème exactement ?

Lien vers le commentaire
Partager sur d’autres sites

Vraiment j'ai essayé TOUT :( et rien n'y fait !

Non, tu n'as pas essayé la BONNE solution ;)

Le problème est que la méthode setText(int) est à utiliser lorsqu'on veut affecter un texte au TextView à partir d'une ressource <string> déclarée dans un fichier externe. Dans ton cas, ce que tu veux, c'est afficher une valeur textuelle représentant ton entier. Il faut donc que tu convertisses ton entier en une chaine, pour pouvoir utiliser la méthode setText(CharSequence)

Ceci devrait fonctionner

 ...
 cons.setText(Integer.toString(x));
 ...

déclare tes EditText et ton Button en global

Inutile. Et pas une pratique à conseiller

(son code compile, référencer une variable locale d'une méthode depuis une anonymous-inner-class déclarée dans la méthode est tout à fait valide (à la contrainte près que ces variables doivent être 'final'))

Lien vers le commentaire
Partager sur d’autres sites

Chpil ;(, j'ai utilisé cette fonction là est toujours rien, je vous passe tout le code:

package carburant.android.com;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class carburant extends Activity {
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

   }

public void calcul ()
{
  final EditText vol;
  final EditText kil;
  final EditText cons;

  vol = (EditText) findViewById(R.id.volume2);
  kil= (EditText) findViewById(R.id.kilometrage2);
  cons= (EditText) findViewById(R.id.consom);

final Button button = (Button) findViewById(R.id.button);

     button.setOnClickListener(new View.OnClickListener() {
   	  	public void onClick(View v) {
   	  		int q1=0;
   	  		int q2=0;

   	  		q1=Integer.parseInt(vol.getText().toString());
   	  		q2=Integer.parseInt(kil.getText().toString());
   	  		int x;
   	  	  	x=q1 + q2;
   	  	  cons.setText(Integer.toString(x));
       	  }
     });
     }
}

Dois-je ajouter

calcul();

juste après

setContentView(R.layout.main);

(j'ai essayé mais j'ai un FC)!

:emo_im_lips_are_sealed: :emo_im_foot_in_mouth: :emo_im_undecided:

Lien vers le commentaire
Partager sur d’autres sites

Ah ben, forcément, si tu n'appelles pas calcul(), ça ne risque pas de marcher...

Et si quand tu l'appelles, tu as un FC, regarde dans les logs les traces de l'exception qui se produit, ça t'indiquera ton problème...

Lien vers le commentaire
Partager sur d’autres sites

Mais d'où vient ce problème? Une erreur sur tous les R (R cannot be resolved to a variable)!

J'ai fais un import android.R mais le problème se déplace vers le main(setContentView(R.layout.main);) et les champs texte(cannot be resolved or is not a field)!

Étrange !

Lien vers le commentaire
Partager sur d’autres sites

ok, essaye de supprimer le dossier /gen et refais un clean. J'ai déjà eu ce problème aussi.

Je ne sais pas comment, mais ça marche maintenant :\ :D !

De plus, le code fait parfaitement maintenant le calcul des 2 champs et il affecte le résultat au champ résultat.

Merci à vous et à chpil :) .

Je vais débuter maintenant l'autre phase qui consiste à ce sujet, si vous pouvez aidez moi à résoudre le problème :).

Merci à vous.

Lien vers le commentaire
Partager sur d’autres sites

Petit problème:

Lorsque j'ajoute des valeurs "float" genre avec virgule (15.15 par exemple) je reçois un FC au moment où je tape sur le bouton Calculer!

Pour les EditText j'ai fais cela:

android:numeric="integer|decimal|signed"

C'est quoi le problème :emo_im_undecided:

Lien vers le commentaire
Partager sur d’autres sites

J'ai changé tout en float(à la place de int) et ça

cons.setText(Float.toString(x));

=> toujours ForceClose :( !

Je re-vérifie :emo_im_undecided:

Je crois que c'est pas Float mais c'est Double, Il faut faire ça aussi

q1=Double.parseDouble(vol.getText().toString());

En mode wait de la simulation...

Lien vers le commentaire
Partager sur d’autres sites

Résolu ;) !

En conclusion, d'après ce que j'ai lu, Float et Double c'est la même chose juste que Double est plus large(prend 8 octets devant les 4 octets de Float) à cause d'un vaste affichage après la virgule!

Bref, l'application est 100% fonctionnelle maintenant! Reste à suivre le chemin en faisant cela

Lien vers le commentaire
Partager sur d’autres sites

Encore un petit problème: je voudrais afficher un toast lorsqu'au moins un champ est vide:

button.setOnClickListener(new View.OnClickListener() {
   	  	public void onClick(View v) {
   	  		float q1;
   	  		float q2;
   	  		q1=Float.parseFloat(vol.getText().toString());
   	  		q2=Float.parseFloat(kil.getText().toString());
   	  		Float x;


   	  		if(TextUtils.isEmpty(vol.getText()))  { 
         	  		Toast.makeText(carburant.this, "Veuillez saisir le 1er champs", Toast.LENGTH_SHORT).show();
         	  	}
   	  		else if (TextUtils.isEmpty(kil.getText()))  { 
             	  		Toast.makeText(carburant.this, "Veuillez saisir le 2ème champs", Toast.LENGTH_SHORT).show();

             	  	}
   	  		else
   	  		{
   	  			x=((q1 / q2)* 100);
   	  			 cons.setText(Float.toString(x));
   	  		}
   	  	}
     });

ForceCLose lorsque je tape sur calculer(2 champs vides!).

Une idée du problème ?

Lien vers le commentaire
Partager sur d’autres sites

J'ai essayé aussi ça:

button.setOnClickListener(new View.OnClickListener() {
   	  	public void onClick(View v) {
           float q1=Float.parseFloat(vol.getText().toString());
           float q2=Float.parseFloat(kil.getText().toString());
           String value1 = vol.getText().toString();
           String value2 = kil.getText().toString();
       	  		if (value1 != null && value1.trim().length() > 0 && value2 != null && value2.trim().length() > 0)
       	  		{
       	  			float x=((q1 / q2)* 100);
      	  			 	cons.setText(Float.toString(x));
       	  		}
       	  		else 
       	  		{
       	  		Toast.makeText(carburant.this, "Veuillez saisir le 1er champs", Toast.LENGTH_SHORT).show();
       	  		}
   	  	}
         });

Toujours FC lorsque les EditText sont vides :(!

Lien vers le commentaire
Partager sur d’autres sites

As-tu regardé dans le logcat la trace de l'exception qui se produit ??? Quelle est l'exception ? La ligne dans le code où elle se produit ?

Ceci-dit, je parierai bien que l'erreur se produit sur le parseFloat, vu que tu fais la conversion vers float de la chaine issue du TextView, avant de tester si le contenu du TextView est vide...

Si tu faisais cela dans le bon ordre, ça irait peut être mieux

button.setOnClickListener(new View.OnClickListener() {
               public void onClick(View v) {
           String value1 = vol.getText().toString();
           String value2 = kil.getText().toString();
                               if (value1 != null && value1.trim().length() > 0 && value2 != null && value2.trim().length() > 0)
                               {
                                       float q1=Float.parseFloat(vol.getText().toString());
                                       float q2=Float.parseFloat(kil.getText().toString());
                                       float x=((q1 / q2)* 100);
                                       cons.setText(Float.toString(x));
                               }
                               else 
                               {
                               Toast.makeText(carburant.this, "Veuillez saisir le 1er champs", Toast.LENGTH_SHORT).show();
                               }
               }
         });

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...