2010-10-06 7 views
0

Les utilisateurs de mon application Android signalent qu'ils reçoivent un message Fermer forcé lorsqu'un appel entrant arrive.java.lang.NullPointerException

J'ai un récepteur de service et un état d'écoute téléphonique classe pour déterminer l'état de la téléphone. Lorsque l'état est "CALL_STATE_RINGING", j'appelle la méthode stopAllPlayback() dans mon activité principale. C'est à ce moment que les utilisateurs signalent les messages "Forced Close".

Pouvez-vous m'aider à déterminer où le problème pourrait être? Je suis nouveau sur Java, donc je ne suis pas sûr à 100% comment résoudre les problèmes en fonction d'une trace de pile.

est ici la trace de la pile:

java.lang.NullPointerException 
at com.tdoo.toodoo.DroidGap.stopAllPlayback(DroidGap.java:190) 
at com.tdoo.toodoo.MyPhoneStateListener.onCallStateChanged(MyPhoneStateListener.java:21) 
at android.telephony.PhoneStateListener$2.handleMessage(PhoneStateListener.java:319) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:143) 
at android.app.ActivityThread.main(ActivityThread.java:4701) 
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) 

MISE À JOUR: Je viens en mesure de reproduire l'erreur moi-même en mettant mon téléphone sous beaucoup de stress (en utilisant singe adb shell), puis en appelant mon téléphone. Il semble que cette erreur se produit sur les téléphones plus lents, mais j'ai le Droid Incredible qui est nettement plus rapide.

Cela donne-t-il de nouvelles idées?

+0

ligne Check 21 en classe MyPhoneStateListener – Josnidhin

+0

Définir un point d'arrêt avant les lignes où il va mal (par exemple la ligne 21 à MyPhoneStateListener) en utiliser un débogueur pour parcourir le code et voir ce qui ne va pas –

+0

@josnidhin 21 appels à DroidGap.stopAllPlayback ( –

Répondre

1

com.tdoo.toodoo.DroidGap.stopAllPlayback (DroidGap.java:190)

Cette ligne signifie que le NPE est jeté de cette ligne exacte. Je suppose que DroidGap est votre code, ce que vous voulez faire est de regarder quelles méthodes sont invoquées à la ligne. Si vous êtes chanceux, il n'y en aura qu'un.

Donc, si ce code ressemble à:

foo.bar(); 

Alors foo est null. Armé de cette information, c'est à vous de déterminer comment foo pourrait être null. Malheureusement, la tâche est beaucoup plus compliquée si vous avez invoqué de nombreuses méthodes ou effectué plusieurs accès membres sur la même ligne.

+0

Merci, Tim. DroidGap.stopAllPlayback consiste seulement en 1 appel à un WebView ... Par exemple: appView.loadUrl ("javascript: alert ('test')"); Est-il possible qu'après un certain temps, l'appView devienne null (ou que l'activité principale soit déchargée), mais le PhoneStateListener est toujours actif et fait des appels à DroidGap.stopAllPlayback()? –

+0

Tim, je viens d'ajouter une mise à jour à mon OP ... Peut-être que cela peut aider à stimuler une idée. –

+0

L'essentiel est, je ne suis pas sûr. Je peux seulement vous dire ce qui cause typiquement un NPE en Java. Techniquement, Android n'est même pas Java (ils n'utilisent pas la JVM, voir Oracle poursuit Google). D'après vos commentaires, je dirais que vous avez une condition de concurrence qui permet à la variable 'appView' d'être' null' quand le téléphone sonne. Construisez-vous WebView dans la même méthode de rappel?Ou comptez-vous sur elle existant de l'exécution normale précédente? –