Android自定义异常类
当一个项目中,异常可能出现地方非常多的时候就需要考虑封装处理异常信息。本篇博客就对自定义异常做一个封装,模拟实际开发中的异常处理。
新建一个基类异常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开发技术。