Bonjour;
J'ai développé un programme qui est maintenant sur le market; et je reçois des rapports d'erreur (restant assez rare...); sur quelque chose que je n'arrive pas à debugger.
J'explique: J'ai un programme qui fait écouter de la musique. Pour cela j'ai une classe MediaPlayerSingleton, qui s'occupe de lire, arrêter, passer à la suivante...
Etant un Singleton, cette classe est accessible de n'importe où (ça qu'est cool avec ça).
[b]Au démarrage du programme, ce singleton est forcément initialisé![b]
Par la suite, l'utilisateur arrive sur l'Activity permettant de contrôler le player avec des boutons. Et quand il clique sur Play/Pause, non seulement ça fait Play/Pause sur le Singleton, mais ça démarre/arrête aussi un LocaleService permettant d'afficher une notification dans le statusbar permettant ainsi à l'utilisateur de savoir qu'une musique est en train de jouer, et ainsi pouvoir quitter l'application tout en laissant la musique tournée.
Ce service, lors de son démarrage accède au Singleton pour récupérer le titre de la musique afin de l'afficher dans la notification.
Tout cela fonctionne, j'ai fait plusieurs manips possibles, plein de tests, tout fonctionne bien.
Cependant, je reçois des rapports d'erreur comme quoi certains auraient des NullPointerException lors du démarrage du service; ainsi le Singleton retournerait Null; alors que c'est impossible, car quand on démarre le service il est forcément initialisé avant!
Et le rapport d'erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public void onStart(Intent intent, int startId) { super.onStart(intent, startId); mps = MediaPlayerSingleton.get(); collection = mps.getCollection(); //NullPointerException mps.addOnChangeListener(this); createNotify(); }
Voici le code permettant de lancer, ou de stopper le service:java.lang.RuntimeException: Unable to create service fr.online.dul.j.android.soundboard.services.SoundboardService: java.lang.NullPointerException
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3126)
at android.app.ActivityThread.access$3300(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2196)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4914)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at fr.online.dul.j.android.soundboard.services.SoundboardService.onCreate(SoundboardService.java:37)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3112)
... 10 more
Rien de compliqué, mais je ne comprends pas l'erreur qui n'arrive que chez de rares personnes (...enfin je ne connais pas vraiment la proportion de ceux qui envoient les rapports d'erreur sur tous les utilisateurs au total; d'ailleurs je ne sais même pas comment nous même on peut envoyer des rapports?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 if(player.isPlaying()) { Intent intent = new Intent(MediaPlayerActivity.this, SoundboardService.class); startService(intent); } else { Intent intent = new Intent(MediaPlayerActivity.this, SoundboardService.class); stopService(intent); }
Donc au final, je suppose que j'ai pas compris quelque chose sur le fonctionnement d'Android... Est ce que ce LocalService peut se lancer sans appel explicite dans mon code?
(genre par une magouille de l'utilisateur ou autres...?)
Partager