2010-11-04 1 views
1

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

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

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

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

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

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

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

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

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

ответ

3

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

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

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

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