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开发技术。
Android自定义异常类的更多相关文章
- android Activity类中的finish()、onDestory()和System.exit(0) 三者的区别
android Activity类中的finish().onDestory()和System.exit(0) 三者的区别 Activity.finish() Call this when your a ...
- Java自定义异常类
用户可以根据自己的需要定义自己的异常类,定义异常类只需要继承Exception类即可 //================================================= // Fi ...
- Android图像格式类及图像转换方法
Android图像格式类及图像转换方法介绍 一款软件的开发和图像密切相关,特别是移动应用程序,在视觉效果等方面是至关重要的,因为这直接关系到用户的体验效果.在Android程序开发的过程中,了解存在哪 ...
- Android 服务类Service 的详细学习
http://blog.csdn.net/vipzjyno1/article/details/26004831 Android服务类Service学习四大组建 目录(?)[+] 什么是服务 服务有 ...
- PHP 错误与异常 笔记与总结(13 )自定义异常类
针对不同的异常,进行不同的处理,可以通过自定义异常类记录特定的异常信息来处理不同类型的异常.自定义异常类通过继承基类(Exception),对基类进行扩展. 自定义异常类 <?php heade ...
- [转]如何编写和应用Java的自定义异常类
编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程.常用的编写自定义异常类的模式如下: public class CustomException exten ...
- Java异常类和自定义异常类
自定义异常类: public class ExtendsException extends Exception { private static final long serialVersionUID ...
- 项目源码--Android答题类游戏源码
下载源码 技术要点: 1. 精致的答题UI 2. Android的Http通信技术 3. Android数据库QLITE与其他数据存储技术 4. Android在线音乐背景技术 5. Android答 ...
- android application类的用法
android application类的用法 Application是android系统Framework提供的一个组件,它是单例模式(singleton),即每个应用只有一个实例,用来存储系统的一 ...
随机推荐
- node.js使用scp2来进行scp操作
示例: var client = require('scp2'); client.scp({ host: '175.84.24.92', username: 'remoteusername', pas ...
- c++简单线程池实现
线程池,简单来说就是有一堆已经创建好的线程(最大数目一定),初始时他们都处于空闲状态,当有新的任务进来,从线程池中取出一个空闲的线程处理任务,然后当任务处理完成之后,该线程被重新放回到线程池中,供其他 ...
- 电力 Web SCADA 工控组态编辑器
前言 SVG 并非仅仅是一种图像格式, 由于它是一种基于 XML 的语言,也就意味着它继承了 XML 的跨平台性和可扩展性,从而在图形可重用性上迈出了一大步.如 SVG 可以内嵌于其他的 XML 文档 ...
- 关于python 使用腾讯云OCR 通用印刷体识别
腾讯的python SDK没有通用印刷体识别,所以参考了别人识别网上图片的方式:https://www.cnblogs.com/semishigure/p/7690789.html 但是咱们使用的基本 ...
- 小白学习java设计模式之策略模式
策略模式:1.分析项目中的变化部分与不变部分(每个设计模式都要分析的)2.多用组合少用继承;用行为类组合,而不是行为继承,更具有弹性直接上代码: package com.wz.oneStrategis ...
- mysql-5.7.18-winx64 免安装版配置
如题,最新的都是只有免安装版的,可以官网下载zip的压缩包. 下载后解压,如下 下面就开始配置 1.在path中添加环境变量 ;D:\coding\mysql-5.7.18-winx64\bin; ← ...
- BZOJ 4372 烁烁的游戏
Description 背景:烁烁很喜欢爬树,这吓坏了树上的皮皮鼠.题意:给定一颗n个节点的树,边权均为1,初始树上没有皮皮鼠.烁烁他每次会跳到一个节点u,把周围与他距离不超过d的节点各吸引出w只皮皮 ...
- [SDOI2008]Cave 洞穴勘测
题目描述 辉辉热衷于洞穴勘测. 某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假 ...
- [洛谷]P3729 曼哈顿计划EX(最小割树/等价流树)
题目大意:给出一张n个点m条边的无向图,每个点有点权,q次询问,每次给出k,要求选出若干个点点权之和不小于k,求一个最大的值x,使得选出的点中任意两点之间至少有x条互不相交的链.(n<=550, ...
- POJ2187Beauty Contest 旋转卡壳
题目链接 http://poj.org/problem?id=2187 先求凸包 再求凸多边形直径 旋转卡壳模板题 #include<cstdio> #include<cstring ...