2015-05-09 2 views
0

Как и в названии, у меня есть список, заполненный курсором. Я могу прокрутить список, который отлично подходит для первых 50 элементов, скажем так, но он падает, если я пытаюсь прокручивать дальше, и он всегда срабатывает в одной точке. Я включаю трассировку стека, но мне это не очень полезно: все вызовы сделаны внутри рамки Android, поэтому, хотя я знаю, что проблема в закрытом db в конце, я не знаю, какая часть моего кода - проблема. Внутри того же приложения у меня есть другие списки, основанные на курсорах, которые не представляют никакой проблемы. У меня нет других идей о причине.Сбой при прокрутке курсора, поддерживаемого списком

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) 
+0

в log говорит, что ваш db закрыт, вы вызвали метод close()? – pskink

+0

Не нарочно. Курсор возвращается из вызова провайдеру контента. Поставщик содержимого извлекает курсор с помощью rawQuery в db. После возвращения курсора db закрывается. Однако я делаю то же самое для другого списка, и это не дает никаких проблем. –

+0

, потому что другие курсоры были меньше, и они вписывались в один буфер под названием CursorWindow – pskink

ответ

Смежные вопросы