Проблема с курсором / Исключение устаревших данных в необычной ситуации - PullRequest
1 голос
/ 04 ноября 2010

Надеясь, что кто-то может помочь с этим, что кажется мне специфической проблемой .. Мой разум немного пульсирует, поскольку это подорвало мое понимание жизненного цикла Android Activity .. Позвольте мне попытаться прояснить ситуацию.

Проблема: я получаю «StaleDataException» во время метода «getView» пользовательского адаптера (расширяющего BaseAdapter), который я использую в действии для заполнения GridView.Звучит прямо сейчас ... Когда я впервые приступаю к занятию, адаптер работает как положено, и сетка заполнена.У меня есть кнопка на активности, которая запускает Намерение, чтобы позволить пользователю сделать фотографию, и возвращается через 'onActivityResult', сохраняя изображение в базе данных.Это все работало также.Фактически я сначала написал эту часть, а затем добавил адаптер и сетку.

Теперь возникает StaleDataException, когда я иду в камеру, чтобы сделать снимок, а затем нажимаю кнопку ОК, чтобы вернуться ... ЯВ большинстве событий моей деятельности содержится много операторов Log, и очень странно возникает исключение StaleDataException до того, как ЛЮБОЙ из этих событий будет запущен ... до OnActivityResult / OnResume и т. д.

Так что я совершенно не понимаю, почемуДоступ к адаптеру осуществляется до того, как я правильно вернусь к своей деятельности и до того, как onActivityResult / OnResume был вызван ..

Отладка шагов, которые приводят к исключению, все это происходит в этой строке:

String contentType = dataCursor.getString(dataCursor.getColumnIndexOrThrow(DbStatics.ACCIDENTS_MEDIA_KEY_TYPE));

Что также сбивает меня с толку, так это то, что dataCursor на самом деле открыт, и первый вызов (getColumnIndexOrThrow) также возвращает значение .. поэтому его getString () приводит к исключению.

Так что янадеюсь, что это достаточно ясно ... и действительно очень надеюсь, что кто-то может пролить свет на то, что происходитна ..

Большое спасибо,

1 Ответ

3 голосов
/ 22 марта 2011

Недавно я столкнулся с точно такой же проблемой почти в том же сценарии. (Я использую Галерею, а не GridView)

В моем случае мой код работал нормально месяцами, пока я недавно не обновил свой N1 до 2.3. Мое решение (после большого количества моих собственных пульсаций) было , а не вызовом startManagingCursor для курсора, который я передаю моему адаптеру. Вместо этого я сам управляю курсором.

Это, казалось, прояснило проблему для меня ... хотя я не мог сказать вам, почему ... может быть, кто-то более опытный может пролить свет.

Надеюсь, это поможет вам.

...