2009-09-04 4 views
8

Je suis victime d'un accident dans mon application lorsque je quitte (via le bouton de retour) hors de mon activité. Autant que je sache, cela se passe dans le code Android et non dans le code, mais je ne suis pas complètement convaincu de cela.Pourquoi suis-je victime d'un plantage lorsque je quitte mon activité?

Voici le stacktrace de adb:

AndroidRuntime E Uncaught handler: thread main exiting due to uncaught exception 
AndroidRuntime E java.lang.RuntimeException: Unable to stop activity {MyApp/MyApp.MainActivity}: java.lang.NullPointerException 
AndroidRuntime E  at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3097) 
AndroidRuntime E  at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3159) 
AndroidRuntime E  at android.app.ActivityThread.access$2400(ActivityThread.java:112) 
AndroidRuntime E  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1724) 
AndroidRuntime E  at android.os.Handler.dispatchMessage(Handler.java:99) 
AndroidRuntime E  at android.os.Looper.loop(Looper.java:123) 
AndroidRuntime E  at android.app.ActivityThread.main(ActivityThread.java:3948) 
AndroidRuntime E  at java.lang.reflect.Method.invokeNative(Native Method) 
AndroidRuntime E  at java.lang.reflect.Method.invoke(Method.java:521) 
AndroidRuntime E  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 
AndroidRuntime E  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 
AndroidRuntime E  at dalvik.system.NativeStart.main(Native Method) 
AndroidRuntime E Caused by: java.lang.NullPointerException 
AndroidRuntime E  at android.app.Activity.performStop(Activity.java:3575) 
AndroidRuntime E  at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3092) 
AndroidRuntime E  ... 11 more 

Quelqu'un a des idées/recommandations?

Répondre

14

Ne peut pas aider beaucoup, car il n'y a pas de code. Toujours à la recherche à

Causée par: java.lang.NullPointerException à android.app.Activity.performStop (Activity.java:3575)

Je viens de vérifier Activity.java

 final int N = mManagedCursors.size(); 
     for (int i=0; i<N; i++) { 
      ManagedCursor mc = mManagedCursors.get(i); 
      if (!mc.mReleased) { 
       mc.mCursor.deactivate(); // line 3575 
       mc.mReleased = true; 
      } 
     } 

Etes-vous sûr que tous les curseurs sont correctement sortis?

+0

Je pense qu'ils devraient être gérés par l'activité ... J'ai appelé startManagingCursor() sur le seul curseur que j'utilise. Ne devrait-il pas gérer cela? –

+0

À partir des documents: Cette méthode permet à l'activité de gérer le cycle de vie du curseur donné en fonction du cycle de vie de l'activité. C'est-à-dire que lorsque l'activité est arrêtée, elle appelle automatiquement deactivate() sur le curseur donné, et quand elle est relancée plus tard, elle appelle query() pour vous. Lorsque l'activité est détruite, tous les curseurs gérés seront automatiquement fermés. –

+0

N'est-ce pas exactement ce que le code que vous avez posté devrait faire? –

0

Dans votre activité avant la méthode startManagingCursor() est appelée, votre curseur est nulle. Ne laissez pas le curseur être nul.

+1

Alors, exactement ce qui a déjà été dit, il y a plus de 2 ans? –

Questions connexes