Android. Обработка исключений
Я хотел бы иметь возможность определить, в случае возникновения исключения, когда пользователь использует мое приложение, где именно произошло исключение. Я хотел бы сделать что-то похожее на метод printStackTrace(). (Так что это в режиме сборки, а не в режиме отладки)
В настоящее время я поместил почти все мои методы из всех моих классов в оператор try-catch (у каждого метода есть оператор try-catch, который включает в себя все его инструкции), и в этот момент я могу отобразить "дерево" или стек методы, если происходит исключение. Но есть ли способ определить номер строки чего-либо, чтобы более точно указать, где внутри метода произошло исключение? Подобно тому, что отображается при использовании printStackTrace().
Я не особо разбираюсь с обработкой исключений, как лучше всего это сделать и можно ли это сделать?
РЕДАКТИРОВАТЬ
И еще одна вещь. Когда я использую printStackTrace () в режиме сборки, где он отображает содержимое, потому что Logcat недоступен? Могу ли я получить эту информацию и, возможно, что-то с ней сделать?ИЛИ даже лучше, могу ли я использовать getStackTrace () в режиме сборки и конвертировать материал в String и, возможно, вывести его куда-нибудь?
1 ответ
Все исключения, которые не обрабатываются вашим кодом и приводят к сбою приложения в режиме выпуска, появятся в консоли разработчика Android, рядом с вашим приложением.
Чтобы это работало, вам нужно будет восстановить запутанные следы стека.
Об обработке исключений: я предлагаю вам прочитать это, например. Вы делаете ошибку в обработке исключений, если окружаете весь свой код блоком try / catch.
Обработка исключений более тонкая, чем эта, и на нее часто влияют соображения проектирования (следует ли обрабатывать исключения локально или возвращать их вызывающей стороне).
Подводя итог: в основе вашего приложения: не обрабатывайте исключения, а бросайте их или позволяйте их выбрасывать, используя предложение throws сигнатур ваших методов. На верхних уровнях, ближе к пользовательскому интерфейсу, обрабатывайте исключения с помощью try / catch, а в случае возникновения ошибки убедитесь, что ваше приложение находится в стабильном состоянии, и выводите некоторые полезные сообщения пользователям.
Больше подробностей (но не так много):
- на уровне базы данных: выбросить исключение. Вы все еще можете поймать их, чтобы записать их, но бросьте или сбросьте их, чтобы сообщить звонящему, что что-то пошло не так
- на бизнес-уровне: поймайте их, убедитесь, что ваша бизнес-модель / модель домена находится в стабильном состоянии и восстанавливается после ошибки, и отправьте их обратно вызывающей стороне.
- на уровне пользовательского интерфейса: ловить исключения и отображать некоторые сообщения для пользователей.