Aller au contenu

[Résolue] problème de code...


Flo07

Recommended Posts

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

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

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

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

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

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

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

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

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

Archivé

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

×
×
  • Créer...