0
就像標題所說,我有一個使用cursoradapter填充的listview。我可以爲前50個元素滾動列表,但是如果我嘗試進一步滾動,它會崩潰,並且它總是在同一點上崩潰。我包含了堆棧跟蹤,但它對我來說並不是非常有用:所有的調用都是在android框架內完成的,所以即使我知道問題最終是封閉的數據庫,但我不知道哪個部分我的代碼是問題所在。在同一個應用程序中,我有其他基於遊標的列表視圖,不會造成任何問題。我沒有任何其他的原因。滾動遊標支持的列表視圖時發生崩潰
java.lang.IllegalStateException: The database '/storage/emulated/0/***/db/***.sqlite' is not open.
at android.database.sqlite.SQLiteDatabase.throwIfNotOpenLocked(SQLiteDatabase.java:2169)
at android.database.sqlite.SQLiteDatabase.createSession(SQLiteDatabase.java:365)
at android.database.sqlite.SQLiteDatabase$1.initialValue(SQLiteDatabase.java:84)
at android.database.sqlite.SQLiteDatabase$1.initialValue(SQLiteDatabase.java:81)
at java.lang.ThreadLocal$Values.getAfterMiss(ThreadLocal.java:430)
at java.lang.ThreadLocal.get(ThreadLocal.java:65)
at android.database.sqlite.SQLiteDatabase.getThreadSession(SQLiteDatabase.java:359)
at android.database.sqlite.SQLiteProgram.getSession(SQLiteProgram.java:101)
at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:62)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:152)
at android.database.sqlite.SQLiteCursor.onMove(SQLiteCursor.java:124)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:214)
at android.database.CursorWrapper.moveToPosition(CursorWrapper.java:162)
at android.widget.CursorAdapter.getItemId(CursorAdapter.java:223)
at android.widget.AbsListView$RecycleBin.retrieveFromScrap(AbsListView.java:6753)
at android.widget.AbsListView$RecycleBin.getScrapView(AbsListView.java:6492)
at android.widget.AbsListView.obtainView(AbsListView.java:2343)
at android.widget.ListView.makeAndAddView(ListView.java:1864)
at android.widget.ListView.fillDown(ListView.java:698)
at android.widget.ListView.fillGap(ListView.java:662)
at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4968)
at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:4512)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:549)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
的的日誌說你的db已關閉,你調用close()方法嗎? – pskink
不是故意的。遊標從調用返回到內容提供者。內容提供者使用rawQuery將數據庫檢索到數據庫。在檢索遊標後關閉數據庫。但是,我爲其他listview做同樣的事情,它不會給任何問題。 –
它因爲其他光標較小,並且它們適合一個稱爲CursorWindow的緩衝區 – pskink