androniennn Posté(e) 12 mars 2011 Share Posté(e) 12 mars 2011 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 More sharing options...
androniennn Posté(e) 12 mars 2011 Auteur Share Posté(e) 12 mars 2011 Vraiment j'ai essayé TOUT :( et rien n'y fait ! Je ne sais pas le code semble correct :\ Lien vers le commentaire Partager sur d’autres sites More sharing options...
eephyne Posté(e) 12 mars 2011 Share Posté(e) 12 mars 2011 déclare tes EditText et ton Button en global Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 12 mars 2011 Share Posté(e) 12 mars 2011 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 More sharing options...
androniennn Posté(e) 12 mars 2011 Auteur Share Posté(e) 12 mars 2011 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 More sharing options...
chpil Posté(e) 12 mars 2011 Share Posté(e) 12 mars 2011 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 More sharing options...
androniennn Posté(e) 12 mars 2011 Auteur Share Posté(e) 12 mars 2011 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 More sharing options...
ovski Posté(e) 12 mars 2011 Share Posté(e) 12 mars 2011 N'importe pas android.R. Vérifie de bien avoir défini dans ton xml tes id tel que: android:id="@+id/volume2" Lien vers le commentaire Partager sur d’autres sites More sharing options...
androniennn Posté(e) 12 mars 2011 Auteur Share Posté(e) 12 mars 2011 N'importe pas android.R. Vérifie de bien avoir défini dans ton xml tes id tel que: android:id="@+id/volume2" Oui, tout est bien défini, en fait le problème est apparu lorsque j'ai fais un "clean" du project :\ ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
ovski Posté(e) 12 mars 2011 Share Posté(e) 12 mars 2011 ok, essaye de supprimer le dossier /gen et refais un clean. J'ai déjà eu ce problème aussi. Lien vers le commentaire Partager sur d’autres sites More sharing options...
androniennn Posté(e) 12 mars 2011 Auteur Share Posté(e) 12 mars 2011 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 More sharing options...
androniennn Posté(e) 12 mars 2011 Auteur Share Posté(e) 12 mars 2011 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 More sharing options...
androniennn Posté(e) 12 mars 2011 Auteur Share Posté(e) 12 mars 2011 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 More sharing options...
androniennn Posté(e) 13 mars 2011 Auteur Share Posté(e) 13 mars 2011 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 More sharing options...
androniennn Posté(e) 13 mars 2011 Auteur Share Posté(e) 13 mars 2011 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 More sharing options...
androniennn Posté(e) 13 mars 2011 Auteur Share Posté(e) 13 mars 2011 SVP quel est le problème avec les "toast" ? la structure du code est-elle correcte ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
androniennn Posté(e) 13 mars 2011 Auteur Share Posté(e) 13 mars 2011 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 More sharing options...
chpil Posté(e) 13 mars 2011 Share Posté(e) 13 mars 2011 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 More sharing options...
androniennn Posté(e) 13 mars 2011 Auteur Share Posté(e) 13 mars 2011 chpil, vous êtes le meilleur!!! ça marche parfaitement maintenant :)! Merci infiniment ! Maintenant, je passe à autre chose=> la sauvegarde ;)! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.