3

この時点で私はかなり挫折しています。私はこれを数日間研究しており、カーソルの問題を超えて何かを分離することさえできません。私はListActivityを拡張し、OnCreateメソッドでstartManagingCursor(newcursor)を使用しています。ここでホームボタンを押す時に実行され、クラッシュしたコード(データベースがすでに満たされている)されていますホームボタンを押したときにアクティビティがクラッシュするのはなぜですか?

private void loadAlbums() { 
    try { 
     newcursor = mDbHelper.getAlbumTitlesCursor(); 
     dbalbumadapter = new AlbumListCursorAdapter(this, newcursor); 
     setListAdapter(dbalbumadapter); 
     } 
    catch (SQLiteException s) { 
     newcursor = null; 
     fetchalbums = new FetchAlbumsTask().execute(); 
     } 
    current_view = ALBUMTITLE_VIEW; 
} 

ここでは、エラーログです:

02-03 13:41:42.379: WARN/dalvikvm(340): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
02-03 13:41:42.389: ERROR/AndroidRuntime(340): Uncaught handler: thread main exiting due to uncaught exception 

02-03 13:41:42.590: ERROR/AndroidRuntime(340): java.lang.RuntimeException: Unable to stop activity {com.skip.ngRCv2/com.skip.ngRCv2.ngRC}: java.lang.RuntimeException: Unable to stop activity {com.skip.ngRCv2/com.skip.ngRCv2.MusicLibraryActivity}: java.lang.NullPointerException 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3227) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3272) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.app.ActivityThread.access$2500(ActivityThread.java:119) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1880) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.os.Looper.loop(Looper.java:123) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at java.lang.reflect.Method.invoke(Method.java:521) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at dalvik.system.NativeStart.main(Native Method) 02-03 13:41:42.590: ERROR/AndroidRuntime(340): 
Caused by: java.lang.RuntimeException: Unable to stop activity {com.skip.ngRCv2/com.skip.ngRCv2.MusicLibraryActivity}: java.lang.NullPointerException 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3227) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.app.ActivityThread.performStopActivity(ActivityThread.java:3174) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:176) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.app.LocalActivityManager.dispatchStop(LocalActivityManager.java:572) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.app.ActivityGroup.onStop(ActivityGroup.java:79) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1169) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.app.Activity.performStop(Activity.java:3797) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3224) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  ... 11 more 
02-03 13:41:42.590: ERROR/AndroidRuntime(340): 
Caused by: java.lang.NullPointerException 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.app.Activity.performStop(Activity.java:3808) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3224) 
02-03 13:41:42.590: ERROR/AndroidRuntime(340):  ... 18 more 

Activity.performStopでNullPointerExceptionが(あり

final void performStop() { 
    if (!mStopped) { 
     if (mWindow != null) { 
      mWindow.closeAllPanels(); 
     } 

     mCalled = false; 
     mInstrumentation.callActivityOnStop(this); 
     if (!mCalled) { 
      throw new SuperNotCalledException(
       "Activity " + mComponent.toShortString() + 
       " did not call through to super.onStop()"); 
     } 

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

     mStopped = true; 
    } 
    mResumed = false; 
} 

私はクローズとdeactivatinを試してみました:私は行番号であること、クロス確認できないにもかかわらずActivity.javaで、この方法から来ているようだActivity.java:3808)、 gカーソルをOnStopメソッドに設定し、リストアダプタをnullに設定します。私が指摘したように、アクティビティがカーソルを管理させるときには、これが必要ではなかったという印象を受けました。カスタムアダプタにカーソルを渡していますが、アダプタの中で管理している例はありません。

この例外を投げているものを少なくとも絞り込むことができたら、感謝します!

+0

が鳴りカーソルはアクティビティによって管理されますが、NPEを引き起こすカーソルのヌルをどこかに設定しますか? – WarrenFaith

+0

はい、startManagingCursor()を呼び出すときにはnullの問題でした。 – dinobud

答えて

9

これは右回転であれば、ライン3808が対応する:

http://code.google.com/p/pdn-slatedroid/source/browse/trunk/eclair/frameworks/base/core/java/android/app/Activity.java?r=12#3808

mc.mCursor.deactivate(); 
[[私は]公式のAndroidのソースをそのない知っているが、行番号の行]を

私が言うことができる限り、mcは決してnullにはなりません。 最終的なmCursornullのカーソルがstartManagingCursor()に渡された場合にのみnullとなるようです。私はこれを確認するために他の人の前に私のメモをキャプチャしました。

カーソルは、startManagingCursor()に渡す直前にログに記録できますか?私はクラッシュ前にそのメッセージが最後に出現したことを知りたいと思っています。それはstartManagingCursor()呼び出しになってきた場合、私は疑問に思う

newcursor = null; 

:SQL例外がありますとき

あなたはこのラインを持っています。


注意:

http://code.google.com/p/pdn-slatedroid/source/browse/trunk/eclair/frameworks/base/core/java/android/app/Activity.java?r=12#1549

public void startManagingCursor(Cursor c) { 
    synchronized (mManagedCursors) { 
     mManagedCursors.add(new ManagedCursor(c)); 
    } 
} 
+0

うわー、それは私の問題を完全に助けました。ありがとう!おそらく私は素朴です(ここでは初心者です)。しかし、私は値を設定する前にstartManagingCursor()を呼び出すことができると考えました。つまり、デフォルトではnullでした。これは私の問題を完全に解決しました!だから、別のクエリで同じカーソル変数を使用しないでください。そしてできる場合は、変更するたびにstartManagingCursor()を呼び出す必要がありますか? – dinobud

+0

これと 'stopManagingCursor()' :) –

0

デバッガでアプリケーションを起動し、NPEで例外ブレークポイントを設定して、どこから救済しているかを確認します。

あなたは何が起こっているか考えてください。

関連する問題