diff --git a/library/src/main/java/com/qiniu/android/http/ResponseInfo.java b/library/src/main/java/com/qiniu/android/http/ResponseInfo.java index feb5d02f7..654f40ccc 100644 --- a/library/src/main/java/com/qiniu/android/http/ResponseInfo.java +++ b/library/src/main/java/com/qiniu/android/http/ResponseInfo.java @@ -91,9 +91,11 @@ public boolean isCancelled() { public boolean isOK() { return statusCode == 200 && error == null && reqId != null; } - + public boolean isNetworkBroken() { - return statusCode == NetworkError; + return statusCode == NetworkError || statusCode == UnknownHost + || statusCode == CannotConnectToHost || statusCode == TimedOut + || statusCode == NetworkConnectionLost; } public boolean isServerError() { @@ -102,16 +104,15 @@ public boolean isServerError() { } public boolean needSwitchServer() { - return statusCode == NetworkError || statusCode == CannotConnectToHost - || statusCode == TimedOut || statusCode == NetworkConnectionLost - || (statusCode >= 500 && statusCode < 600 && statusCode != 579); + return isNetworkBroken() || isServerError(); } public boolean needRetry() { - return !isCancelled() && (isNetworkBroken() || isServerError() || statusCode == 406 + return !isCancelled() && (needSwitchServer() || statusCode == 406 || (statusCode == 200 && error != null)); } + public String toString() { return String.format(Locale.ENGLISH, "{ResponseInfo:%s,status:%d, reqId:%s, xlog:%s, xvia:%s, host:%s, ip:%s, port:%d, duration:%f s, error:%s}", super.toString(), statusCode, reqId, xlog, xvia, host, ip, port, duration, error);