2011-05-18 63 views
1

如何在Android中創建錯誤處理程序。在.Net中,我只需創建一個處理程序來切換錯誤代碼,以便將正確的響應轉發給用戶。開關錯誤代碼

在這種情況下,我使用了一個由try和catch包圍的SAX解析器,當出現錯誤時,我顯然得到一條消息但沒有唯一的錯誤ID。 try \ catch塊可能會捕獲10個錯誤,但是如何區分這些錯誤,以便我可以嘗試並處理預期的錯誤?

理想情況下是這樣的:

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 
} 

也許我應該提到,錯誤IM試圖趕上是空文件

回答

1

你可能會引發特定的異常(可能所有延伸的公共基礎除外)和手柄每個都在其自己的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); 

你可能會發現,它可能更容易引發和處理特殊情況例外。這使得構建和訪問不同的內容變得容易。

+0

Ahhhhh您可能能夠進一步幫助我,我明白拋出這些異常應該由Parser處理程序來處理,現在我已經實現了一個單獨的類作爲處理程序,但處理程序沒有被調用,並且仍在繼續到try \ catch語句。我設置我的處理程序如下> parser.setErrorHandler(新的xmlErrorHandler()) 2011-05-18 15:45:41

+0

(我寫了一個SAX解析器已經很久了)。我認爲你的ErrorHandler是由解析庫本身調用的,用於驗證錯誤等。所以如果你願意,它可以讓你有機會處理這些問題。但是,您仍然可以從您自己的代碼中拋出SAXParseExceptions。我認爲這些會出現在parser.parse()。 – sudocode 2011-05-18 16:06:49

3

Jay Dee,

在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 
} 
+0

我不喜歡沿着皺眉的路徑,因爲你可以想象,但我現在正在調查parser.getErrorHandler(新的xmlErrorHandler()),但沒有得到它,因爲引發的錯誤似乎沒有調用處理程序...呢? – 2011-05-18 15:42:39

1

你能在你的代碼中使用多個catch塊?

try { 
// code 
}catch(error1 e){ 
//error1 handling code 
}catch(error2 e){ 
//error2 handling 
} 

等等。