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),即每个应用只有一个实例,用来存储系统的一 ...
随机推荐
- sumo快速运行简单仿真实例详细教程
本文旨在让大家快速的了解sumo,并给出运行一个简单的sumo的例子的教程,进而了解基本sumo工程的架构,使大家对该软件产生兴趣并持续学习下去,刚开始学习仿真的确枯燥,项目"跑起来&quo ...
- ashx页面怎么调用Handler的Session
aspx里面直接可以用Session["Name"]进行赋值和取值,ashx中就得继承接口IRequiresSessionState.然后使用! 实现: public class ...
- JavaScript 字典(Dictionary)
TypeScript方式实现源码 // set(key,value):向字典中添加新元素. // remove(key):通过使用键值来从字典中移除键值对应的数据值. // has(key ...
- thinphp验证码的简单实现
index.html <!DOCTYPE html><html lang="en"><head> <meta charset=" ...
- 使用redis,zookeeper实现分布式锁
1.分布式锁 分布式锁一般用在分布式系统或者多个应用中,用来控制同一任务是否执行或者任务的执行顺序.在项目中,部署了多个tomcat应用,在执行定时任务时就会遇到同一任务可能执行多次的情况,我们可以借 ...
- 初学Servlet之实现Servlet接口
package app01a;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.Servlet;im ...
- Mysql之使用Mysql运算符
Mysql运算符: 1.算术运算符 加减乘除与求模 SELECT 6+4 加法操作, 6-4 减法操作, 6*4 乘法操作, 6/2 除法操作, 6 DIV 2 除 ...
- 在Linux服务器部署 .NET-Core 项目
一.文章概要 这篇文章是讲述一个Linux 新手将 .NET-Core 项目部署在 Linux 服务器上的一个记录,以及在部署期间遇到的问题以及解决办法.有不恰当的地方.欢迎大神指正. 二.前期准备 ...
- [HNOI2016]序列
题目描述 给定长度为n的序列:a1,a2,...,an,记为a[1:n].类似地,a[l:r](1<=l<=r<=N)是指序 列:al,al+1,...,ar-1,ar.若1< ...
- POJ 2289(多重匹配+二分)
POJ 2289(多重匹配+二分) 把n个人,分到m个组中.题目给出每一个人可以被分到的那些组.要求分配完毕后,最大的那一个组的人数最小. 用二分查找来枚举. #include<iostream ...