Переключать коды ошибок

#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().