Kwert-soft.ru

IT Софт для ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java lang illegalstateexception already tesselating

Ошибка Andro >

окружающая среда (Linux/Eclipse Dev для планшета Xoom под управлением HoneyComb 3.0.1)

в моем приложении я использую камеру (startIntentForResult ()), чтобы сделать снимок. После того, как снимок сделан, я получаю обратный вызов onActivityResult() и могу загрузить растровое изображение с помощью Uri, переданного через намерение «сфотографировать». В этот момент моя деятельность возобновляется, и я получаю ошибку, пытаясь перезагрузить изображения в галерею:

единственная логика курсора Я использую это после изображение берется я конвертирую Uri в файл, используя следующую логику

любые идеи, что я делаю неправильно?

6 ответов

похоже, что вызов managedQuery () устарел в API Honeycomb.

Doc для managedQuery () читает:

также я заметил, что вызываю курсор.close () после запроса, который, я думаю, является no-no. Нашел это очень полезная ссылка как хорошо. После некоторого чтения я придумал это изменение, которое, кажется, работает.

для записи, вот как я исправил это в своем коде (который работает на Android 1.6 и выше): проблема в моем случае заключалась в том, что я непреднамеренно закрывал управляемые курсоры, вызывая CursorAdapter.changeCursor(). Вызываю Активность.stopManagingCursor () на курсоре адаптера перед изменением курсора решил проблему:

исправить: используйте context.getContentResolver().query вместо activity.managedQuery .

я создал этот вопрос здесь, поскольку я не мог прокомментировать последний ответ (комментарии отключены по какой-то причине). Я думал, что открытие новой темы только усложнит ситуацию.

я получаю сбои приложений, когда я иду от Действие A to Действие B а затем вернуться к Действие A. Это не происходит все время — только иногда и мне трудно найти, где именно это происходит. Все происходит на то же устройство (Nexus S), но я не считаю, что это проблема устройства.

Читать еще:  Javax net ssl sslhandshakeexception handshake failed

у меня есть несколько вопросов относительно ответа @Martin Stine.

  • в документации говорится о changeCursor(c); : «измените базовый курсор на новый курсор. Если есть существующий курсор, он будет закрыт». Так почему же я должен stopManagingCursor(currentCursor); — это не перебор?
  • когда я использую код, предлагаемый @Martin Stine, я получаю исключение нулевого указателя. Причина то есть, что в первом «запуске» приложения ((SimpleCursorAdapter)getListAdapter()) будет оцениваться как NULL, потому что курсор еще не был создан. Конечно, я мог бы проверить, не получаю ли я null и только затем попытаться остановить управление курсором, но, наконец, я решил поместить свой » stopManagingCursor(currentCursor); в метод onPause() этого действия. Я думал, что таким образом у меня наверняка будет курсор, чтобы перестать управлять, и я должен сделать это, прежде чем я оставлю действие другому. Проблема — я использую несколько курсоры (один для заполнения текста поля EditText, а другой для представления списка) в моей деятельности, я думаю, не все из них связаны с курсором ListAdapter —
    • как узнать, какой из них перестать управлять? Если у меня есть 3 разных списка?
    • должен ли я закрыть все из них во время onPause() ?
    • как получить список всех моих открытых курсоров?

так много вопросов. Надеюсь, кто-нибудь сможет помощь.

когда я доберусь до onPause() у меня есть курсор, чтобы остановить управление, но я еще не определил, решает ли это проблему, поскольку эта ошибка появляется спорадически.

ПОСЛЕ НЕКОТОРОГО РАССЛЕДОВАНИЯ:

я нашел кое-что интересное, что может дать ответ на «таинственную» сторону этого вопроса:

Activity A использует два курсора: один для заполнения поля EditText. Другой — заполнить ListView.

при переходе от действия A к действию B и возвращении поле + ListView в действии A должно быть заполнено снова. Похоже, что поле EditText никогда не будет иметь проблем с этим. Я не мог найти способ получить текущий курсор поля EditText (например, в Cursor currentCursor = ((SimpleCursorAdapter)getListAdapter()).getCursor(); ) и причина говорит мне, что поле EditText не будет его хранить. С другой стороны, ListView «запомнит» свой курсор с прошлого раза (до действия A -> действие B). Кроме того, и это странная вещь, Cursor currentCursor = ((SimpleCursorAdapter)getListAdapter()).getCursor(); будет иметь другой идентификатор после действия B — > Activity A и все это без меня всегда зовут

Читать еще:  Java метод append

Я думаю, что в некоторых случаях, когда системе нужно освободить ресурсы, курсор будет убит, а когда действие B -> действие A, система все равно попытается использовать этот старый мертвый курсор, что приведет к исключению. И в других случаях система придумает новый курсор, который все еще жив, и, таким образом, никаких исключений не произойдет. Это может объяснить, почему это появляется только иногда. Я думаю, это трудно отладить из-за разницы в скорости приложения при запуске или отладке приложения. При отладке требуется больше времени и, таким образом, может дать системе время придумать новый курсор или наоборот.

в моем понимании это делает использование

как рекомендовано @Martin Stine a должны в некоторых случаях и резервные in Другие: если я возвращаюсь к методу, и система пытается использовать мертвый курсор, необходимо создать новый курсор и заменить его в ListAdapter, иначе я получаю сердитых пользователей приложения с разбитым приложением. В другом случае, когда система найдет себе новый курсор — строки выше избыточны, поскольку они аннулируют хороший курсор и создают новый.

Я думаю, чтобы предотвратить эту избыточность, мне нужно что-то вроде этого:

Ссылка на основную публикацию
Adblock
detector