Aller au contenu

Fermeture de programme lors d'un onClick...


Ghony

Recommended Posts

Bonsoir, voilà j'ai un petit soucis.

Je suis occupé de developper une petite application permettant la création de notes (mémo), et j'ai un problème avec une fonction qui permet d'enregistrer mes données.

Voici le code qui sera plus explicite :

AlertDialog.Builder ad = new AlertDialog.Builder(this);
ad.setIcon(R.drawable.icon);
ad.setTitle("Ajouter une note");
ad.setView(LayoutInflater.from(this).inflate(R.layout.new_note, null));

ad.setPositiveButton("Envoyer", 
       new DialogInterface.OnClickListener() 
       {
           public void onClick(DialogInterface dialog, int id) 
           {
               //On recup les données
               EditText eTitre = (EditText) findViewById(R.id.EditText01);
               EditText eDescription = (EditText) findViewById(R.id.EditText01);

               String mTitre = eTitre.getText().toString();
               String mDescription = eDescription.getText().toString();

               db.inserer(mTitre, mDescription);

               //on rafraichie
               DataBind();
           }
       }
);

Une foi le formulaire soucis (après avoir cliqué sur "Envoyer"), l'application se ferme, pas de message dans la console de débuggage ni rien.

Après quelques test, c'est cette partie qui pose problème :

EditText eTitre = (EditText) findViewById(R.id.EditText01);
EditText eDescription = (EditText) findViewById(R.id.EditText01);

String mTitre = eTitre.getText().toString();
String mDescription = eDescription.getText().toString();

Je veux convertir un EditText (qui contient le titre et la description que je viens d'écrire) en String (pour ma fonction inserer()).

Avez vous une idée de résolution ?

Aucune zone souligné en rouge n'apparait dans l'IDE.

Merci ;-)

Lien vers le commentaire
Partager sur d’autres sites

première chose : apprendre à utiliser le logcat, c'est un outil intégré à Eclipse et facile à utiliser.

Il te permettra de repérer tes erreurs en t'indiquant la ligne ou ca plante et un message d'erreur.

Seconde chose. Ce logcat va te renvoyer un nullpointerexception.

Je parie qu'un, voire deux de tes edittext est vide.

Ce qui veut dire que quand tu fais un truc null . toString, il plante.

:cool:

Lien vers le commentaire
Partager sur d’autres sites

Encore plus fort que les Jedis... "Ton string va planter, si si, je t'assure" (dit il, accompagné du geste de la main "copyrighté" pour hypnotiser son interlocuteur).

En même temps, le nullPointerException est la plus flagrante et commune des erreurs en Java.

Lien vers le commentaire
Partager sur d’autres sites

Voici un rapport du LogCast :

04-08 21:15:07.755: ERROR/AndroidRuntime(999): Uncaught handler: thread main exiting due to uncaught exception
04-08 21:15:07.775: ERROR/AndroidRuntime(999): java.lang.NullPointerException
04-08 21:15:07.775: ERROR/AndroidRuntime(999):     at com.ghony.android.droidnotes.Main$1.onClick(Main.java:88)
04-08 21:15:07.775: ERROR/AndroidRuntime(999):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
04-08 21:15:07.775: ERROR/AndroidRuntime(999):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-08 21:15:07.775: ERROR/AndroidRuntime(999):     at android.os.Looper.loop(Looper.java:123)
04-08 21:15:07.775: ERROR/AndroidRuntime(999):     at android.app.ActivityThread.main(ActivityThread.java:3948)
04-08 21:15:07.775: ERROR/AndroidRuntime(999):     at java.lang.reflect.Method.invokeNative(Native Method)
04-08 21:15:07.775: ERROR/AndroidRuntime(999):     at java.lang.reflect.Method.invoke(Method.java:521)
04-08 21:15:07.775: ERROR/AndroidRuntime(999):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
04-08 21:15:07.775: ERROR/AndroidRuntime(999):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
04-08 21:15:07.775: ERROR/AndroidRuntime(999):     at dalvik.system.NativeStart.main(Native Method)

Comme vous m'avez dit, c'est une histoire de nullPointerexception.

Vous avez tout les deux raison, ce sont les EditText qui merdouille.

Je pense qu'étant donné qu'il sont sur une autre vue (new_note.xml) je pense que ça viens de là non ?

Merci à vous ;)

Lien vers le commentaire
Partager sur d’autres sites

La prophétie s'est accomplie.

Enfin, soit, ce que je fais dans ce cas là ( et ca doit pas être la plus propre des solutions), c'est définir mes edittext juste avant de créer le AlertDialog, quand tu es encore dans ta vue principale.

Mais il faut quand même prévoir une condition de vérification que tes champs ne soient pas vides!

Edit: je suis fade et je n'ai pas envie de tester. C'est ton EditText qui est null ou le EditText.getText()?

Lien vers le commentaire
Partager sur d’autres sites

...

Enfin, soit, ce que je fais dans ce cas là ( et ca doit pas être la plus propre des solutions), c'est définir mes edittext juste avant de créer le AlertDialog, quand tu es encore dans ta vue principale.

...

A ne pas prendre au pied de la lettre hein, mais définir les choses au fil de l'eau est bien pour la compréhension (la règle du "au plus près") mais parfois ça joue des tours surtout dans ces langages à gestion pseudo-automatique de la mémoire.

Concrètement, que se passe t'il si tu fais des new() au fur et à mesure, ton système à un moment donné va dire "pause, out of ram... GC !"; si c'est pendant une page statique ça va, une animation à 50fps... moyen.

Bref tout ça pour dire que si on peut grouper et allouer les éléments, c'est bien parfois :)

Lien vers le commentaire
Partager sur d’autres sites

Si je définie mes EditText dans ma vue principale, forcement le programme plante au démarrage étant donné que c'est deux EditText sont crée dans un layout annexe qui est appellé lors de la création de l'AlertDialog.

Tu comprend ce que je veux dire ?

J'ai beau mettre n'importe ou les EditText, s'il ne sont pas quelques part après la création de l'AlertDialog, sa plante.

Merci pour ton aide ;)

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...