package com.codecomb.exceptions;
import java.io.IOException;
import java.net.ConnectException;
import java.net.SocketException;
import java.net.UnknownHostException;
import org.apache.http.HttpException;
public class AppException extends Exception {
/**
*
*/
private static final long serialVersionUID = 1L;
/** 定义异常类型 */
public final static byte TYPE_NETWORK = 0x01;
public final static byte TYPE_SOCKET = 0x02;
public final static byte TYPE_HTTP_CODE = 0x03;
public final static byte TYPE_HTTP_ERROR = 0x04;
public final static byte TYPE_PARSE_FAILED = 0x05;
public final static byte TYPE_IO = 0x06;
public final static byte TYPE_RUN = 0x07;
public final static byte TYPE_WEBSERVICE = 0x08;
private byte type;
private String code;
private String description;
private AppException(byte type, String code, Exception excp) {
super(excp);
this.type = type;
this.code = code;
}
private AppException(byte type, String code, String description,
Exception excp) {
super(excp);
this.type = type;
this.code = code;
this.description = description;
}
public String getCode() {
return this.code;
}
public int getType() {
return this.type;
}
public String getDescription() {
return this.description;
}
/**
* 网络异常,错误码XX
*
* @param code
* @return
*/
public static AppException http(String code) {
return new AppException(TYPE_HTTP_CODE, code, null);
}
/**
* 网络异常,请求超时
*
* @param e
* @return
*/
public static AppException http(Exception e) {
return new AppException(TYPE_HTTP_ERROR, "0", e);
}
/**
* 网络异常,读取数据超时
*
* @param e
* @return
*/
public static AppException socket(Exception e) {
return new AppException(TYPE_SOCKET, "0", e);
}
/**
* 文件流异常
*
* @param e
* @return
*/
public static AppException io(Exception e) {
if (e instanceof UnknownHostException || e instanceof ConnectException) {
return new AppException(TYPE_NETWORK, "0", e);
} else if (e instanceof IOException) {
return new AppException(TYPE_IO, "0", e);
}
return run(e);
}
/**
* 数据解析异常
*
* @param e
* @return
*/
public static AppException parse(Exception e) {
return new AppException(TYPE_PARSE_FAILED, "0", e);
}
/**
* 网络连接失败,请检查网络设置
*
* @param e
* @return
*/
public static AppException network(Exception e) {
if (e instanceof UnknownHostException || e instanceof ConnectException) {
return new AppException(TYPE_NETWORK, "0", e);
} else if (e instanceof HttpException) {
return http(e);
} else if (e instanceof SocketException) {
return socket(e);
}
return http(e);
}
/**
* 应用程序运行时异常
*
* @param e
* @return
*/
public static AppException run(Exception e) {
return new AppException(TYPE_RUN, "0", e);
}
/**
* 调用服务异常
*
* @param e
* @return
*/
public static AppException webservice(String code, String description) {
return new AppException(TYPE_WEBSERVICE, code, description, null);
}
// /**
// * 提示友好的错误信息
// *
// * @param ctx
// */
// public void makeToast(Context ctx) {
// switch (this.getType()) {
// case TYPE_HTTP_CODE:
// String err = ctx.getString(R.string.err_http_status_code,
// this.getCode());
// Toast.makeText(ctx, err, Toast.LENGTH_SHORT).show();
// break;
// case TYPE_HTTP_ERROR:
// Toast.makeText(ctx, R.string.err_http_exception, Toast.LENGTH_SHORT)
// .show();
// break;
// case TYPE_SOCKET:
// Toast.makeText(ctx, R.string.err_socket_exception,
// Toast.LENGTH_SHORT).show();
// break;
// case TYPE_NETWORK:
// Toast.makeText(ctx, R.string.err_network_not_connected,
// Toast.LENGTH_SHORT).show();
// break;
// case TYPE_PARSE_FAILED:
// Toast.makeText(ctx, R.string.err_parser_failed, Toast.LENGTH_SHORT)
// .show();
// break;
// case TYPE_IO:
// Toast.makeText(ctx, R.string.err_io_exception, Toast.LENGTH_SHORT)
// .show();
// break;
// case TYPE_RUN:
// Toast.makeText(ctx, R.string.err_app_run_code, Toast.LENGTH_SHORT)
// .show();
// break;
//
// case TYPE_WEBSERVICE:
//
// Toast.makeText(ctx, this.getDescription(), Toast.LENGTH_SHORT)
// .show();
//
// break;
//
// }
//
// }
}