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开发技术。



原文地址:https://www.cnblogs.com/wanghang/p/6299496.html