Android自定义异常类

时间:2022-04-13 23:51:27

当一个项目中,异常可能出现地方非常多的时候就需要考虑封装处理异常信息。本篇博客就对自定义异常做一个封装,模拟实际开发中的异常处理。

新建一个基类异常HException:

public class HMException extends Exception {

public HMException() {
super();
// TODO Auto-generated constructor stub
}

public HMException(String detailMessage, Throwable throwable) {
super(detailMessage, throwable);
// TODO Auto-generated constructor stub
}

public HMException(String detailMessage) {
super(detailMessage);
// TODO Auto-generated constructor stub
}

public HMException(Throwable throwable) {
super(throwable);
// TODO Auto-generated constructor stub
}

}
然后,定义四个异常具体的子类,让其继承自HMException:

public class HMAException extends HMException {

}

新建一个类HMApi,代表实际项目中用到这个API的方法时候可能抛出的异常情况:

定义四个方法,当外界某处调用这几个方法的时候,每个方法都会抛出异常

public class HMApi {
public void method1() throws HMException {
// 模拟,某一个时刻出现了HMAException
throw new HMAException();
}

public void method2() throws HMException {
// 模拟,某一个时刻出现了HMBException
throw new HMBException();
}

public void method3() throws HMException {
// 模拟,某一个时刻出现了HMCException
throw new HMCException();
}

public void method4() throws HMException {
// 模拟,某一个时刻出现了HMDException
throw new HMDException();
}
}
例如在一个活动中调用上述四个方法,应该抛出异常:

public class MainActivity extends Activity {

private HMApi mApi;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mApi = new HMApi();
}

public void method1(View v) {
try {
mApi.method1();
} catch (HMException e) {
e.printStackTrace();
}
}

public void method2(View v) {
try {
mApi.method2();
} catch (HMException e) {
e.printStackTrace();
}
}

public void method3(View v) {
try {
mApi.method3();
} catch (HMException e) {
e.printStackTrace();
}
}

public void method4(View v) {
try {
mApi.method4();
} catch (HMException e) {
e.printStackTrace();
}
}

}
这个时候,发现四个地方都抛出了异常,假设我们当发生异常的时候,给用户提示什么。我们就要统一去处理它。

定义一个ExceptionHandler类:

public class ExceptionHandler {
/**
* 根据不同的HMException给用户具体的提示
* @param e 传递过来HMException ,我在这个类里面具体识别是什么异常,来提示对应的错误信息

*/
public static void toastByHMException(Context context, HMException e) {
int errCode = 0;
// errCode 具体化
if (e instanceof HMAException) {
errCode = 1;
} else if (e instanceof HMBException) {
errCode = 2;
} else if (e instanceof HMCException) {
errCode = 3;

} else if (e instanceof HMDException) {
errCode = 4;
}
// 根据不同的errcode给用户做提示
toastByErrCode(context, errCode);
}

private static void toastByErrCode(Context context, int errCode) {
String content = "";
switch (errCode) {
case 1:
content = "程序出现了HMAException";
break;
case 2:
content = "程序出现了HMBException";
break;
case 3:
content = "程序出现了HMCException";
break;
case 4:
content = "程序出现了HMDException";
break;

default:
break;
}
Toast.makeText(context, content, 0).show();
}
}
自定义好了异常处理提示类,我们活动代码中处理异常就可以在每个抛出catch方法里面加入一行代码即可:

例如点击第一个按钮,我处理异常提示信息可以这么写:

public void method1(View v) {
try {
mApi.method1();
} catch (HMException e) {
e.printStackTrace();
ExceptionHandler.toastByHMException(MainActivity.this, e);
}
}



这样异常处理提示只需要一行代码就能解决最初的问题了。运行看看提示信息是否正确:

Android自定义异常类

很明显,提示非常清楚。


喜欢我的朋友可以关注我哦~

也可以扫描下方的二维码,或搜索公众号  Android程序员开发指南  去微信每日阅读一篇安卓开发文章。


Android自定义异常类

长按上方二维码,关注本公众号一起交流Android开发技术。