2009-09-04 8 views
8

Sto riscontrando un arresto anomalo nella mia app quando esco (tramite il pulsante Indietro) dall'attività. Per quanto posso dire questo sta accadendo nel codice di Android e non nel mio, ma non ne sono completamente convinto.Perché ho un arresto anomalo all'uscita dalla mia attività?

Ecco lo stacktrace da 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 

Qualcuno ha qualche idea/raccomandazioni?

risposta

14

Non posso fare molto, perché non c'è il codice. ancora guardando

Causato da: java.lang.NullPointerException a android.app.Activity.performStop (Activity.java:3575)

Ho appena controllato 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; 
      } 
     } 

Sei sicuro che tutti i cursori sono stati rilasciati correttamente?

+0

Penso che dovrebbero essere gestiti dall'attività ... Ho chiamato startManagingCursor() sull'unico cursore che sto usando. Non dovrebbe questo gestirlo? –

+0

Dalla documentazione: questo metodo consente all'attività di gestire il ciclo di vita del Cursore specificato per te in base al ciclo di vita dell'attività. Cioè, quando l'attività è ferma, chiamerà automaticamente deactivate() sul Cursore dato, e quando verrà riavviato in seguito chiamerà requery() per te. Quando l'attività viene distrutta, tutti i cursori gestiti verranno chiusi automaticamente. –

+0

Non è esattamente quello che dovrebbe fare il codice che hai postato? –

0

nella vostra attività prima di metodo startManagingCursor() viene chiamato, il cursore è nullo. Non lasciare che il cursore sia nullo.

+1

Quindi, esattamente quello che è stato già detto, oltre 2 anni fa? –

Problemi correlati