package com.zcy.ghost.vivideo.model.exception;
import com.google.gson.JsonParseException;
import org.json.JSONException;
import java.net.ConnectException;
import java.text.ParseException;
import retrofit2.adapter.rxjava.HttpException;
/**
* Created by 12262 on 2016/5/30.
*/
public class ExceptionEngine {
//对应HTTP的状态码
private static final int UNAUTHORIZED = 401;
private static final int FORBIDDEN = 403;
private static final int NOT_FOUND = 404;
private static final int REQUEST_TIMEOUT = 408;
private static final int INTERNAL_SERVER_ERROR = 500;
private static final int BAD_GATEWAY = 502;
private static final int SERVICE_UNAVAILABLE = 503;
private static final int GATEWAY_TIMEOUT = 504;
public static ApiException handleException(Throwable e) {
ApiException ex;
if (e instanceof HttpException) { //HTTP错误
HttpException httpException = (HttpException) e;
ex = new ApiException(e, ERROR.HTTP_ERROR);
switch (httpException.code()) {
case UNAUTHORIZED:
case FORBIDDEN:
case NOT_FOUND:
case REQUEST_TIMEOUT:
ex.setCode(REQUEST_TIMEOUT);
ex.setDisplayMessage("请求超时"); //均视为网络错误
case GATEWAY_TIMEOUT:
case INTERNAL_SERVER_ERROR:
case BAD_GATEWAY:
case SERVICE_UNAVAILABLE:
default:
ex.setDisplayMessage("网络错误"); //均视为网络错误
break;
}
return ex;
} else if (e instanceof ServerException) { //服务器返回的错误
ServerException resultException = (ServerException) e;
ex = new ApiException(resultException, resultException.getCode());
ex.setDisplayMessage(resultException.getMsg());
return ex;
} else if (e instanceof JsonParseException
|| e instanceof JSONException
|| e instanceof ParseException) {
ex = new ApiException(e, ERROR.PARSE_ERROR);
ex.setDisplayMessage("解析错误"); //均视为解析错误
return ex;
} else if (e instanceof ConnectException) {
ex = new ApiException(e, ERROR.NETWORD_ERROR);
ex.setDisplayMessage("连接失败"); //均视为网络错误
return ex;
} else {
ex = new ApiException(e, ERROR.UNKNOWN);
ex.setDisplayMessage("未知错误"); //未知错误
return ex;
}
}
}