2017-05-05 39 views
1

我嘗試更改我的Android應用的錯誤輸出。獲取異常原因的唯一標識

我想是這樣的:

if (e.getCode().equals("Network is unreachable")) { 

info = "error => " + "Lost Connection to Internet"; 

}else if(e.getCode().equals("Connection Refused")) { 

info = "error => " + "Cant Reach server"; 
} 

我的問題是我需要的扔錯誤的唯一標識符。

e.getCode()回報:org.XXX.android.dto.core.ServiceException

因此,這不是一個幫助becouse它的異常,但不是這個原因

e.getMessage()返回:無法連接到/ XXXX(端口XXX):連接失敗:ENETUNREACH(網絡無法訪問)

是我需要的更多,但我只需要像這樣的字符串的最後部分:網絡無法訪問 或另一個唯一的原因標識符。

在此先感謝,並有一個偉大的日子:)

回答

1

你不應該這樣做。
可以修改錯誤消息。 今天你回到「網絡不可達」,但明天你就可以返回 其他任何消息,而不是:「網絡不可達」,「節點是無法訪問」,等等

我認爲org.XXX.android.dto.core.ServiceException過於寬泛。 您可以有UnreachableNetworkExceptionConnectionRefusedException

現在如果要減少特定異常的數量,比使用String消息值更好的方法是使用枚舉值來指定每種類型的異常情況。

當您創建ServiceException時,您可以對枚舉字段進行賦值,以便能夠在異常處理中重用它。

例如:

public class ServiceException extends Exception { 

    public enum Type { 
     UNREACHABLE_NETWORK, CONNECTION_REFUSED; 

    } 

    private Type type; 

    public ServiceException(String message, Exception cause, Type type) { 
     super(message, cause); 
     this.type = type; 
    } 

    public Type getType() { 
     return type; 
    } 
} 

現在你可以應用例外以這種方式處理:

if (e.getType() == ServiceException.Type.UNREACHABLE_NETWORK) { 
    info = "error => " + "Lost Connection to Internet"; 
} 
else if(e.getType() == ServiceException.Type.CONNECTION_REFUSED) {  
    info = "error => " + "Cant Reach server"; 
} 
+0

啊謝謝,我一直認爲這不是最佳做法。我會盡快測試它。 – Ice

+0

你是在正確的方式如此:) – davidxxx

1

您可以使用下面的代碼:

if (e.getCode().contains("Network is unreachable")) { 

info = "error => " + "Lost Connection to Internet"; 

}else if(e.getCode().contains("Connection Refused")) { 

info = "error => " + "Cant Reach server"; 
} 

只要改變等於功能包含功能。

+0

工作正常,但我不知道這是不是最好的做法,或只是一個變通? – Ice