Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
#1

Attempting to access a closed CursorWindow - Программирование Android

30.04.2015, 11:12. Просмотров 507. Ответов 10
Метки нет (Все метки)

Второй вопрос за день) Это рекорд наверное, но все не так просто, столкнулся с проблемой в чужом проекте. Куча курсоров, писали видать давно, или кто то сильно любит мазохизм ну в общем.

Один раз обращаюсь к бд через курсор все ок, второй раз когда обращаюсь ничего не обновляя и ничего не делая, просто делаю второй запрос то приложение выдает ошибки не указывающие ни на что конкретное...

Кликните здесь для просмотра всего текста
android.database.StaleDataException: Attempting to access a closed CursorWindow.Most probable cause: cursor is deactivated prior to calling this method.
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:139)
at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:74)
at android.database.CursorWrapper.getLong(CursorWrapper.java:106)
at android.support.v4.widget.CursorAdapter.getItemId(CursorAdapter.java:226)
at android.widget.AbsListView$RecycleBin.retrieveFromScrap(AbsListView.java:6778)
at android.widget.AbsListView$RecycleBin.getScrapView(AbsListView.java:6517)
at android.widget.AbsListView.obtainView(AbsListView.java:2346)
at android.widget.GridView.onMeasure(GridView.java:1060)
at in.srain.cube.views.GridViewWithHeaderAndFooter.onMeasure(GridViewWithHeaderAndFooter.java:90)
at android.view.View.layout(View.java:15658)
at android.view.ViewGroup.layout(ViewGroup.java:5038)
at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:543)
at android.view.View.layout(View.java:15671)
at android.view.ViewGroup.layout(ViewGroup.java:5038)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at android.view.View.layout(View.java:15671)
at android.view.ViewGroup.layout(ViewGroup.java:5038)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15671)
at android.view.ViewGroup.layout(ViewGroup.java:5038)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at android.view.View.layout(View.java:15671)
at android.view.ViewGroup.layout(ViewGroup.java:5038)
at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:494)
at android.view.View.layout(View.java:15671)
at android.view.ViewGroup.layout(ViewGroup.java:5038)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at android.view.View.layout(View.java:15671)
at android.view.ViewGroup.layout(ViewGroup.java:5038)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2086)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1843)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
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:5254)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)


Как решить без понятия, с курсорами работал давно и уже не помню что к чему. Погуглив нашел кучу ответов что вот так делать не хорошо

Java
1
2
3
4
5
@Override
    public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
        mAdapter.swapCursor(cursor);
        mAdapter.notifyDataSetChanged();
    }
А без этого не работает) Может кто сталкивался и знает как эту ошибку можно пофиксить?)

Добавлено через 13 часов 8 минут
Неужели никто не сталкивался с этой фигней непонятной?)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2015, 11:12     Attempting to access a closed CursorWindow
Посмотрите здесь:
Android При нажатии на кнопку выходит ошибка "Attempting to invoke method on a null object reference"
Android "Attempt to re-open an already-closed object" при работе с SQLite
Java EE Attempting to execute an operation on a closed EntityManagerFactory
C# The underlying connection was closed: The connection was closed unexpectedly
Ошибка An error occured while attempting to initialize the Borland Database Engine (error $251E) Delphi
.NET The Web server reported the following error when attempting to create or open the WEB project located at the following URL:...
closed Delphi
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
30.04.2015, 11:44     Attempting to access a closed CursorWindow #2
В принципе вызов

Java
1
mAdapter.notifyDataSetChanged();
лишний, поскольку mAdapter.swapCursor(cursor) сам его вызывает...
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
30.04.2015, 11:49  [ТС]     Attempting to access a closed CursorWindow #3
Цитата Сообщение от Armagedo Посмотреть сообщение
лишний, поскольку mAdapter.swapCursor(cursor) сам его вызывает...
Но падает не из за него =( Вот когда закомментируешь
Java
1
mAdapter.swapCursor(cursor);
, падать перестает, но и работать перестает так же)
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
30.04.2015, 11:54     Attempting to access a closed CursorWindow #4
Для началу влепи-ка ты ему маячок на закрытость...

Java
1
2
3
4
5
6
7
8
@Override
    public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
        if (cursor.isClosed())
                Toast.makeText(находим контекст, "Cursor is closed", Toast.LENGTH_SHORT).show();
        else
                mAdapter.swapCursor(cursor);
         
    }
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
30.04.2015, 11:58  [ТС]     Attempting to access a closed CursorWindow #5
Цитата Сообщение от Armagedo Посмотреть сообщение
Для началу влепи-ка ты ему маячок на закрытость...
Походу курсор не закрывается, потому что приложение так же падает, но ни тоста, ни в логе ничего нет когда я пытаюсь вывести. Значит причина не в этом.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
30.04.2015, 12:32     Attempting to access a closed CursorWindow #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Нуна шерстить по коду тогда, где что происходит, ибо ж неспроста оно..неспроста
Или на адаптер (и курсор) повесить DataSetObserver и последить, что происходит с ними в событиях этого обзёрвера.

Вообщем, шо тебе сказать...
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
30.04.2015, 12:37     Attempting to access a closed CursorWindow #7
swapCursor заменить на changeCursor.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
30.04.2015, 12:41     Attempting to access a closed CursorWindow #8
Netscape,

Change the underlying cursor to a new cursor. If there is an existing cursor it will be closed.
Parameters:
cursor The new cursor to be used
311
312 public void changeCursor(Cursor cursor) {
313 Cursor old = swapCursor(cursor);
314 if (old != null) {
315 old.close();
316 }
317 }
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
30.04.2015, 12:48  [ТС]     Attempting to access a closed CursorWindow #9
Цитата Сообщение от Netscape Посмотреть сообщение
swapCursor заменить на changeCursor.
Цитата Сообщение от Armagedo Посмотреть сообщение
Netscape,
Change the underlying cursor to a new cursor. If there is an existing cursor it will be closed.
Parameters:
cursor The new cursor to be used
311
312 public void changeCursor(Cursor cursor) {
313 Cursor old = swapCursor(cursor);
314 if (old != null) {
315 old.close();
316 }
317 }
Та же самая ошибка) Не помогло)
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 839
30.04.2015, 12:50     Attempting to access a closed CursorWindow #10
Цитата Сообщение от dajver Посмотреть сообщение
at in.srain.cube.views.GridViewWithHeaderAndFooter.onMeasure(GridViewWithHeaderAndFooter.java:90)
а тут ничего нет?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2015, 13:17     Attempting to access a closed CursorWindow
Еще ссылки по теме:
Delphi Connection closed gracefully
Connection Closed Gracefully PHP Сети
C# Cannot write to closed textwriter
Connection Closed Gracefully Delphi
C# .NET 4.x The underlying connection was closed

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
dajver
408 / 272 / 18
Регистрация: 18.09.2010
Сообщений: 1,107
30.04.2015, 13:17  [ТС]     Attempting to access a closed CursorWindow #11
Цитата Сообщение от androbro Посмотреть сообщение
а тут ничего нет?
Это кастомный гридвью из либы https://github.com/etao-open-source/cube-sdk

Добавлено через 24 минуты
В общем сделал все по другому, сделал что бы вытаскивало данные в адаптер кастомный, и из него уже показываю все что мне надо... Костыль но зато работает) Свап курсор плохой
Yandex
Объявления
30.04.2015, 13:17     Attempting to access a closed CursorWindow
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru