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

新建一个基类异常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自定义异常类的更多相关文章

  1. android Activity类中的finish()、onDestory()和System.exit(0) 三者的区别

    android Activity类中的finish().onDestory()和System.exit(0) 三者的区别 Activity.finish() Call this when your a ...

  2. Java自定义异常类

    用户可以根据自己的需要定义自己的异常类,定义异常类只需要继承Exception类即可 //================================================= // Fi ...

  3. Android图像格式类及图像转换方法

    Android图像格式类及图像转换方法介绍 一款软件的开发和图像密切相关,特别是移动应用程序,在视觉效果等方面是至关重要的,因为这直接关系到用户的体验效果.在Android程序开发的过程中,了解存在哪 ...

  4. Android 服务类Service 的详细学习

    http://blog.csdn.net/vipzjyno1/article/details/26004831 Android服务类Service学习四大组建   目录(?)[+] 什么是服务 服务有 ...

  5. PHP 错误与异常 笔记与总结(13 )自定义异常类

    针对不同的异常,进行不同的处理,可以通过自定义异常类记录特定的异常信息来处理不同类型的异常.自定义异常类通过继承基类(Exception),对基类进行扩展. 自定义异常类 <?php heade ...

  6. [转]如何编写和应用Java的自定义异常类

    编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程.常用的编写自定义异常类的模式如下:   public class CustomException exten ...

  7. Java异常类和自定义异常类

    自定义异常类: public class ExtendsException extends Exception { private static final long serialVersionUID ...

  8. 项目源码--Android答题类游戏源码

    下载源码 技术要点: 1. 精致的答题UI 2. Android的Http通信技术 3. Android数据库QLITE与其他数据存储技术 4. Android在线音乐背景技术 5. Android答 ...

  9. android application类的用法

    android application类的用法 Application是android系统Framework提供的一个组件,它是单例模式(singleton),即每个应用只有一个实例,用来存储系统的一 ...

随机推荐

  1. HTML的各种基本标签

      一 .head中的各种标签                1.       <!DOCTYPE html><html>文档类型声明   声明当前文件是一个HTML5文件文档 ...

  2. Django REST framework+Vue 打造生鲜超市(十)

    十一.pycharm远程代码调试 第三方登录和支付,都需要有服务器才行(回调url),我们可以用pycharm去远程调试服务器代码 服务器环境搭建 以全新阿里云centos7系统为例: 11.1.阿里 ...

  3. javaIO操作之字节输出流--OutputStream

    OutputStream /** * <li>输出单个字节:public abstract void write(int b) throws IOException ; * <li& ...

  4. postman学习笔记(一)——最简单的postman入门

    昨天开始正式接触postman的操作,最简单的操作是根据接口文档一个个测试接口. 例如: 测试环境地址:http://111.2.198.4(项目组自己的测试环境,要测试的项目组肯定会给你的) //以 ...

  5. pyqt5 动画学习(三) 指定控件的移动轨迹

    这一篇来讲解自定义控件的移动轨迹 原理:我们采用QPainterPath先画一个弧线,然后加载一个物体让物体移动,设置100个关键帧,每个关键帧物体的坐标位置就是弧线的坐标位置,这样就能达到按照指定轨 ...

  6. HDU 1724 Ellipse

    Problem Description Math is important!! Many students failed in 2+2’s mathematical test, so let's AC ...

  7. LGTB 与序列

    LGTB 有一个长度为N 的序列A,现在他想构造一个新的长度为N 的序列B,使得B 中的任意两个数都 互质. 并且他要使ai与bi对应项之差最小 请输出最小值 输入 第一行包含一个数N 代表序列初始长 ...

  8. hdu 4352 数位dp + 状态压缩

    XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. [BZOJ]1085 骑士精神(SCOI2005)

    这种鲜明的玄学风格很明显就是十几年前的题目. Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐 ...

  10. bzoj2149拆迁队 斜率优化dp+分治

    2149: 拆迁队 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 397  Solved: 177[Submit][Status][Discuss] ...