zoukankan      html  css  js  c++  java
  • 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开发技术。



  • 相关阅读:
    Nginx 高级配置
    nginx安装和优化配置
    location语法介绍
    iptables
    通过 loganalyzer 展示数据库中的系统日志
    ubuntu_server16.04详细安装步骤
    内存控制mmap的原型和使用方法
    C语言中open函数read函数lseek函数是如何使用的
    gdb调试工具的基本使用
    C语言如何制作静态库
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299496.html
Copyright © 2011-2022 走看看