Flo07 Posté(e) 22 avril 2010 Share Posté(e) 22 avril 2010 Bonjour à tous, J'ai un problème dans mon code qui me retourne une erreur à l'exécution qui me force la fermeture de l'appli. En fait, je réalise un enregistrement d'un fichier d'une part et de l'autre je stock le nom de ce fichier afin de pouvoir faire un reset à la demande de l'utilisateur ce qui supprimerai tous les fichier créé. Voilà le code de l'enregistrement : public void WriteSettings(Context context, String data){ this.tabwidget.tabVille("lyon.dat"); //ERREUR ICI FileOutputStream fOut = null; OutputStreamWriter osw = null; try{ deleteFile("lyon.dat"); fOut = context.openFileOutput("lyon.dat",MODE_APPEND); osw = new OutputStreamWriter(fOut); osw.write(data); osw.flush(); //popup pour le résultat Toast.makeText(context, "Enregistrement réussit",Toast.LENGTH_SHORT).show(); ReadSettings(this); } catch (Exception e) { Toast.makeText(context, "Settings not saved",Toast.LENGTH_SHORT).show(); } finally { try { osw.close(); fOut.close(); } catch (IOException e) { Toast.makeText(context, "Settings not saved",Toast.LENGTH_SHORT).show(); } } } J'envoie donc le nom du fichier dans la class "TabWidget" avec le code suivant : public String[] tabVille(String nomVille){ int i = 0; Toast.makeText(this, "tabVille", 1000).show(); while (ville[i]!=null){ i++; } ville[i]= nomVille; Toast.makeText(this, "tabVille OK", 1000).show(); return ville; } Voilà je vous ai commenté l'endroit où l'erreur ce produit. Je ne voix pas d'où ça peut venir... Si quelqu'un a une idée je suis preneur ! Merci par avance et bonne journée à tous Lien vers le commentaire Partager sur d’autres sites More sharing options...
Osaris Posté(e) 22 avril 2010 Share Posté(e) 22 avril 2010 Lance en mode Debug et regarde quelle est l'erreur dans LogCat, ça sera beaucoup plus simple pour débugguer... Mais je veux pas dire, mais ton code : int i = 0; while (ville[i]!=null){ i++; } ville[i]= nomVille; ça fait peur... Au bout d'un moment ça plantera forcement, ville[] a une taille fixe. Pourquoi ne pas utiliser plutôt une liste par exemple ? Si vraiment tu veux un tableau, il faudrait y coupler un int qui te dis combien d'enregistrement sont déjà remplis, plutôt que de tout reparcourrir comme ça, et puis faire un contrôle sur la taille du tableau. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Flo07 Posté(e) 22 avril 2010 Auteur Share Posté(e) 22 avril 2010 Merci pour ta réponse, Je pense que le problème vient lors de l'appel car aucun Toast n'apparait... Donc la fonction tabVille ne se lance meme pas... Quel est la taille maximum de mon tableau ? C'est une valeur par défault ? Encore merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Osaris Posté(e) 22 avril 2010 Share Posté(e) 22 avril 2010 Dans ce cas là c'est peut être ton "tabwidget" qui est à null. Mais encore une fois, utilise le mode Debug, c'est fait pour ça et ça te dira quelle est l'erreur. Le tableau a la taille que tu lui donne lors de l'initialisation, par exemple : ville = new String[1000]; pour un tableau de taille 1000. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Flo07 Posté(e) 22 avril 2010 Auteur Share Posté(e) 22 avril 2010 Ok alors voilà le LogCat : 04-22 08:09:01.636: WARN/dalvikvm(1506): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)04-22 08:09:01.646: ERROR/AndroidRuntime(1506): Uncaught handler: thread main exiting due to uncaught exception 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.LocProMobile.android/com.LocProMobile.android.VegaLyon}: java.lang.NullPointerException 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at android.app.ActivityThread.access$1800(ActivityThread.java:112) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at android.os.Handler.dispatchMessage(Handler.java:99) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at android.os.Looper.loop(Looper.java:123) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at android.app.ActivityThread.main(ActivityThread.java:3948) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at java.lang.reflect.Method.invokeNative(Native Method) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at java.lang.reflect.Method.invoke(Method.java:521) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at dalvik.system.NativeStart.main(Native Method) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): Caused by: java.lang.NullPointerException 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at com.LocProMobile.android.VegaLyon.WriteSettings(VegaLyon.java:233) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at com.LocProMobile.android.VegaLyon$4.onRatingChanged(VegaLyon.java:111) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at android.widget.RatingBar.dispatchRatingChange(RatingBar.java:308) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at android.widget.RatingBar.onProgressRefresh(RatingBar.java:252) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at android.widget.ProgressBar.doRefreshProgress(ProgressBar.java:492) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at android.widget.ProgressBar.refreshProgress(ProgressBar.java:501) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at android.widget.ProgressBar.setProgress(ProgressBar.java:550) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at android.widget.ProgressBar.setProgress(ProgressBar.java:531) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at android.widget.RatingBar.setRating(RatingBar.java:188) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at com.LocProMobile.android.VegaLyon.onCreate(VegaLyon.java:135) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231) 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): ... 11 more 04-22 08:09:01.706: INFO/Process(577): Sending signal. PID: 1506 SIG: 3 04-22 08:09:01.706: INFO/dalvikvm(1506): threadid=7: reacting to signal 3 04-22 08:09:01.846: INFO/dalvikvm(1506): Wrote stack trace to '/data/anr/traces.txt' Je ne l'ai pas pris en entier simplement les erreurs. Merci pour ton aide en tout cas ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Osaris Posté(e) 22 avril 2010 Share Posté(e) 22 avril 2010 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): Caused by: java.lang.NullPointerException 04-22 08:09:01.667: ERROR/AndroidRuntime(1506): at com.LocProMobile.android.VegaLyon.WriteSettings(VegaLyon.java:233) NullPointerException, ça veut dire que le tabwidget n'a probablement pas été initialisé et vaut null, donc quand tu essais d'y appeller la fonction tabVille ça plante. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Flo07 Posté(e) 22 avril 2010 Auteur Share Posté(e) 22 avril 2010 Ok je vais regarder ça. Par contre vu que TabWidget est une activité à part entière, comment ca se passe pour ne pas qu'elle soit null ? Encore merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Osaris Posté(e) 22 avril 2010 Share Posté(e) 22 avril 2010 Le tabwidget déclaré dans VegaLyon, ce n'est qu'un champ qui au début est forcément null, il faut le lier à l'instance de TabWidget. Si tu déclares juste par exemple : TabWidget tabwidget; ça ne suffit pas à pouvoir l'utiliser, tabwidget n'est relié à rien. il faut le relier à une instance de TabWidget. En fait je pense que tu aurais peut être besoin de lire des tutos sur Java et sur Android ;) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Flo07 Posté(e) 22 avril 2010 Auteur Share Posté(e) 22 avril 2010 Oui c'est exactement ce que j'ai déclaré. Effectivement, il me manque un peu de pratique encore... Et donc en dernière question après j'arrête de te déranger mais comment instancier TabWidget dans VegaLyon ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Osaris Posté(e) 22 avril 2010 Share Posté(e) 22 avril 2010 Soit l'instance que tu veux utiliser existe déjà et est accessible par instanceExistante : tabwidget = instanceExistante; Soit tu veux en créer une, et tu utilise un des constructeurs de TabWidget : tabwidget = new TabWidget(); Mais c'est la base de l'orienté objet, tu devrais vraiment lire un bon tuto Java ;) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Flo07 Posté(e) 22 avril 2010 Auteur Share Posté(e) 22 avril 2010 Merci beaucoup pour ton aide ! Je vais essayer de prendre le temps de lire un peu de JAVA ^^ 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.