Android. Обработка исключений

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

В настоящее время я поместил почти все мои методы из всех моих классов в оператор try-catch (у каждого метода есть оператор try-catch, который включает в себя все его инструкции), и в этот момент я могу отобразить "дерево" или стек методы, если происходит исключение. Но есть ли способ определить номер строки чего-либо, чтобы более точно указать, где внутри метода произошло исключение? Подобно тому, что отображается при использовании printStackTrace().

Я не особо разбираюсь с обработкой исключений, как лучше всего это сделать и можно ли это сделать?

РЕДАКТИРОВАТЬ

И еще одна вещь. Когда я использую printStackTrace () в режиме сборки, где он отображает содержимое, потому что Logcat недоступен? Могу ли я получить эту информацию и, возможно, что-то с ней сделать?ИЛИ даже лучше, могу ли я использовать getStackTrace () в режиме сборки и конвертировать материал в String и, возможно, вывести его куда-нибудь?

1 ответ

Решение

Все исключения, которые не обрабатываются вашим кодом и приводят к сбою приложения в режиме выпуска, появятся в консоли разработчика Android, рядом с вашим приложением.

Чтобы это работало, вам нужно будет восстановить запутанные следы стека.

Об обработке исключений: я предлагаю вам прочитать это, например. Вы делаете ошибку в обработке исключений, если окружаете весь свой код блоком try / catch.

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

Подводя итог: в основе вашего приложения: не обрабатывайте исключения, а бросайте их или позволяйте их выбрасывать, используя предложение throws сигнатур ваших методов. На верхних уровнях, ближе к пользовательскому интерфейсу, обрабатывайте исключения с помощью try / catch, а в случае возникновения ошибки убедитесь, что ваше приложение находится в стабильном состоянии, и выводите некоторые полезные сообщения пользователям.

Больше подробностей (но не так много):

  • на уровне базы данных: выбросить исключение. Вы все еще можете поймать их, чтобы записать их, но бросьте или сбросьте их, чтобы сообщить звонящему, что что-то пошло не так
  • на бизнес-уровне: поймайте их, убедитесь, что ваша бизнес-модель / модель домена находится в стабильном состоянии и восстанавливается после ошибки, и отправьте их обратно вызывающей стороне.
  • на уровне пользовательского интерфейса: ловить исключения и отображать некоторые сообщения для пользователей.
Другие вопросы по тегам