データベースアダプターが正常に終了していることを確認しているため、このエラーの原因については困惑しています。IllegalStateException:データベースが既に閉じられている(ViewPagerを使用)
致命的な例外:メイン java.lang.IllegalStateException:データベース/data/data/com.acedit.assignamo/databases/data.db(ここでLogCatのことわざ(それらのすべてのタグがAndroidRuntimeある)ものですconn#0)は既にandroid.database.sqlite.SQLiteDatabase.verifyDbIsOpen(SQLiteDatabase.java:2082)の を閉じていました。android.database.sqlite.SQLiteDatabase.lock(SQLiteDatabase.java:413)の android.database.sqlite。 SQLiteDatabase.lock android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:164)で(SQLiteDatabase.java:400)android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:79)で ATおよび(SQLiteCursor.java:147)android.database.AbstractCursor.moveToPosition(AbstractCursor.java:178) android.support.v4.widget.CursorAdapter.getItemId(CursorAdapter.java: 225) android.widget.AbsListView.onSaveInstanceState(AbsListView.java:1569) at android.view.View.dispatchSaveInstanceState(View.java:9868) at android.view.ViewGroup.dispatchFreezeSelfOnly(ViewGroup.java:2310) android.view.View.saveHierarchyStateでandroid.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2296) でandroid.widget.AdapterView.dispatchSaveInstanceState(AdapterView.java:770) (View.java:9851) ででandroid.support.v4.app.FragmentManagerImpl.saveFragmentViewState(Fragme ntManager.java:1561) android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:962) (android.support.v4.app.FragmentManagerImpl.detachFragment(FragmentManager.java:1233) 、android)にあります。 ())。 FragmentManager.java:431) android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) (android.support.v4.view.ViewPager.populate(ViewPager.java:895) 、android)にあります。 support.v4.view.ViewPager.populate(ViewPager.java:772) android.support.v4.vi ew.ViewPager.completeScroll(ViewPager.java:1539) android.support.v4.view.ViewPager.computeScroll(ViewPager.java:1422) android.view.View.getDisplayList(View.java:10406) at android.view.View.View.View.ViewGroupDispatchGetDisplayList(ViewGroup.java:2597) (android.view.View.getDisplayList(View.java:10380)) (android.view.View.View.GetDisplayList(ViewGroup.java:2597)) はandroidです。 view.View.View.getDisplayList(View.java:10380) android.view.View.View.View.View.View.View.GateDisplayList(ViewGroup.java:2597) (android.view.View.java:10380) android.viewにあります。 ViewGroup.dispatchGetDisplayList(ViewGroup.java:2597) android.view.View.getDisplayList(View.java:10380)android.view.HardwareRenderer $ GlRenderer.draw(HardwareRenderer.java:875)android.view.ViewRootImpl.performTraversalsでandroid.view.ViewRootImpl.draw(ViewRootImpl.java:1910) で で(ViewRootImpl.java:1634) android.os.Looper.loopでandroid.os.Handler.dispatchMessage(Handler.java:99) でandroid.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) (Looper.java:137) ででandroid.app.ActivityThread.main(ActivityThread.java:4575) at java.lang.reflect。Method.invokeNative(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786) at comから返さ
public Cursor fetchIncompleteAssignments(Short course) { DbAdapter adapter = new DbAdapter(context, null, Values.ASSIGNMENT_TABLE); adapter.open(); Cursor r; if (course == null) // Fetching from all courses r = adapter.fetchAllWhere(Values.ASSIGNMENT_LIST_FETCH, Values.ASSIGNMENT_KEY_STATUS + "=" + 0, Values.ASSIGNMENT_KEY_DUE_DATE); else r = adapter.fetchAllWhere(Values.ASSIGNMENT_LIST_FETCH, Values.ASSIGNMENT_KEY_COURSE + "=" + course + " AND " + Values.ASSIGNMENT_KEY_STATUS + "=" + 0, Values.ASSIGNMENT_KEY_DUE_DATE); adapter.close(); return r; } // Part of DbAdapter: public DbAdapter open() throws SQLException { dbHelper = new DatabaseHelper(context); db = dbHelper.getWritableDatabase(); return this; } public void close() { if (db != null) { try { db.close(); dbHelper.close(); } catch (NullPointerException e) { Log.e("Close", "Error: " + e + " " + e.getMessage()); } } else Log.e("Close", "Error! db \"" + DATABASE_TABLE + "\" is null."); }
Cursor
:dalvik.system.NativeStart.main(ネイティブメソッド)
私のコードで.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) fetchAllAssignments()
は、CursorAdapter
でListView
を入力するために使用されます。 ListView
はListFragment
のコンテンツで、このListFragmentのインスタンスは、ViewPagerの各ページに複数表示されています(1つはすべてのコースの割り当てを示し、次に1つは各コースのページを表示します)。
何が問題なのですか?私の知る限り、私はデータベースを正しく閉じています。より多くのコードが必要な場合はお知らせください。前もって感謝します!
EDIT:データはデータベースからプルされ、ListViewにも入力されます。私は様々なページをスワイプできますが、フラグメントが停止するとクラッシュするようです。別のアクティビティを開始したときにクラッシュすることはよくありますが、必ずしもそうではありません。ごくまれに、ページをスワイプしているときに時折クラッシュすることもあります。 onResume()
私は、データベースからリストをリロード私は
public void onPause() {
super.onPause();
if (!assignmentsCursor.isClosed()) {
assignmentsCursor.close();
assignmentsCursor = null;
}
}
をとの新しいコピーを入手:ここに私のonPause()メソッドは、(I)は、(onStop()、またはonDestroyを持っていない)私のフラグメントのためですコンテキスト:getActivity()
多分何かがクリアされて(メモリの目的のために)、私はそれをリロードしていないでしょうか?私はNullPointerExceptionを一切取得していないので、これは私にとってはそう思わないでしょう...
ええ、それは間違いなくすべての答えを最もよく理解しています。私はそれをすることは決して考えなかった。 :) – mightimaus
おかげで@ EverythingTech96、これはあなたの問題を解決した場合は、私に教えてください。 – kdehairy