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

新建一个基类异常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. [LeetCode] K Empty Slots K个空槽

    There is a garden with N slots. In each slot, there is a flower. The N flowers will bloom one by one ...

  2. Mysql之单表记录查询

    数据记录查询: 1.简单数据记录查询: select * from table_name; select allfield from table_name; select distinct(属性名) ...

  3. “百度杯”CTF比赛 九月场_Code(PhpStorm)

    题目在i春秋ctf大本营 打开链接是一张图片,审查元素发现关键词base64,图片的内容都以base64加密后的形式呈现,查看url形式,应该是一个文件读取的漏洞 这里我们可以采用url/index. ...

  4. [SDOI2010]地精部落

    题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有一个[b][u]独一无二[/u][/b]的高度Hi, ...

  5. 计蒜客NOIP2017提高组模拟赛(三)day1

    火山喷发 火山喷发对所有附近的生物具有毁灭性的影响.在本题中,我们希望用数值来模拟这一过程. 在环境里有 n 个生物分别具有 A​1​​,A​2​​,⋯,A​n​​点生命值,一次火山喷发总计 MM 轮 ...

  6. 【NOIP2013】传染病控制

    题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染病,难以准确判别病毒携带 ...

  7. 【Uva 11604 编码都有歧义了】

    ·你的目的就是要让编码有歧义,这就美妙了. ·英文题,述大意:       给出n个模板字符串,询问是否存在一个字符串,使得用模板串(随便你用多少个)来拼凑这个串,能够至少有两种拼法.如果有,就输出“ ...

  8. CentOS7.4 源码安装MySQL8.0

    MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 以下为本人2018.4.23日安装过程的记录.整个过程大 ...

  9. 四种常用IO模型

    1) 同步阻塞IO(Blocking IO)2) 同步非阻塞IO(Non-blocking IO)3) IO多路复用(IO Multiplexing)4) 异步IO(Asynchronous IO) ...

  10. 在 Mac OS X 上安装 TensorFlow

    在 Mac OS X 上安装 TensorFlow 这个文档说明了如何在 Mac OS X 上安装 TensorFlow. 注意:从 1.2 版本开始,在 Mac OS X 上 TensorFlow ...