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



  • 相关阅读:
    LeetCode Missing Number (简单题)
    LeetCode Valid Anagram (简单题)
    LeetCode Single Number III (xor)
    LeetCode Best Time to Buy and Sell Stock II (简单题)
    LeetCode Move Zeroes (简单题)
    LeetCode Add Digits (规律题)
    DependencyProperty深入浅出
    SQL Server存储机制二
    WPF自定义RoutedEvent事件示例代码
    ViewModel命令ICommand对象定义
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299496.html
Copyright © 2011-2022 走看看