Jump to content

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 ;-)

Link to comment
Share on other 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:

Link to comment
Share on other 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.

Link to comment
Share on other 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 ;)

Link to comment
Share on other 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()?

Link to comment
Share on other 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 :)

Link to comment
Share on other 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 ;)

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...