#android
#Android
Вопрос:
Как мне создать обработчик ошибок в Android. В .Net я бы просто создал обработчик переключения кодов ошибок для передачи пользователю правильного ответа, необходимого.
В этом случае я использую синтаксический анализатор SAX, окруженный try и catch, при возникновении ошибки я, очевидно, получаю сообщение, но без уникального идентификатора ошибки. в блоке try catch может быть зафиксировано десять ошибок, но как мне отличить ошибки, чтобы я мог попытаться обработать ожидаемые ошибки?
В идеале что-то вроде этого:
switch (e.getErrorID){
case 1000:
//Handle This Expected Error
break;
case 1064:
//Handle This Expected Error
break;
case 2025:
//Handle This Expected Error
break;
default:
//Unexpexted Error
}
Возможно, я должен упомянуть, что ошибка, которую я пытаюсь поймать, — это пустой документ
Ответ №1:
Джей Ди,
В Java обычно не одобряется наличие общего обработчика исключений. Эта ссылка дает хорошее объяснение:http://source.android.com/source/code-style.html#dont-catch-generic-exception
Вы захотите сделать что-то более похожее…
try {
//stuff
} catch (NumberFormatException e) {
//specific handling for NumberFormatException
} catch (NullPointerException e) {
//specific handling for NullPointerException
}
Комментарии:
1. Я не рад следовать по неодобрительному пути, как вы можете себе представить, однако сейчас я исследую parser.getErrorHandler (новый xmlErrorHandler()), но не совсем понял, поскольку вызванная ошибка, похоже, не вызывает обработчик… пока?
Ответ №2:
Можете ли вы использовать несколько блоков catch в своем коде?
try {
// code
}catch(error1 e){
//error1 handling code
}catch(error2 e){
//error2 handling
}
и так далее.
Ответ №3:
Вы могли бы создавать определенные исключения (возможно, все они расширяют общее базовое исключение) и обрабатывать каждое в своем собственном catch
блоке.
В качестве альтернативы вы могли бы реализовать одно общее исключение с помощью getErrorCode
метода, с помощью которого вы могли бы переключаться в одном catch
блоке. (Кстати, это подход, используемый в SQLException).
Специфический подход к исключениям:
throw new MissingAttributeException("a_mandatory_attr");
throw new InvalidAttributeValueException("some_attr", badValue);
или общий подход:
throw new GenericParsingException(MISSING_ATTRIBUTE, "a_mandatory_attr");
throw new GenericParsingException(INVALID_ATTRIBUTE_VALUE, "some_attr", badValue);
Вероятно, вы обнаружите, что может быть проще создавать и обрабатывать определенные исключения. Это упрощает создание различного контента и доступ к нему.
Комментарии:
1. Ааааа, возможно, вы сможете мне помочь дальше, я понимаю, что выдача этих исключений должна обрабатываться обработчиком синтаксического анализа, теперь я реализовал отдельный класс в качестве обработчика, но обработчик не вызывается и все еще возвращается к инструкции try catch. Я настраиваю свой обработчик следующим образом>parser.setErrorHandler(новый xmlErrorHandler())< xmlErrorHandler является классом обработчика … но, похоже, он не вызывается???
2. (Прошло много времени с тех пор, как я писал синтаксический анализатор SAX.) Я думаю, что ваш ErrorHandler вызывается самой библиотекой синтаксического анализа для ошибок проверки и тому подобного. Таким образом, это дает вам возможность справиться с ними, если вы хотите. Тем не менее, вы все равно можете использовать SAXParseExceptions из своего собственного кода. Я думаю, что они появятся при parser.parse().