Android开发中经常在我们对逻辑分支考虑不周全的时候出现预料之外的问题,导致出现异常,没有对异常进行处理使得程序Crash。例如:创建一个TextView对象,没有使用findViewById对其进行实例化就操作此对象。就会出现NullPointException的异常。相应的程序必然出现Crash。这样的错误当然对一个程序员来讲是必须整改的一个错误。然而,在某些情况下我们是很难预料到会不会出现异常的。而出现了异常我们就要让程序直接崩溃吗?例如,一个网络请求回来的数据,我们使用Gson框架进行反序列化成一个业务bean。某个字段空了,直接就因为这一个字段空了就让程序Crash吗?显然不合理!下面将提供一种”逃避”问题的方式来有效的解决此问题。
Bundle bundle=new Bundle();
bundle.putString("title",sms.getName());
bundle.putString("left", sms.getMainSaleman().getName());
String str=sms.getCreateDate();
str=str.substring(0,10);
bundle.putString("right",str);
bundle.putString("id",sms.getId());
sourcelist.add(bundle);
以上代码片段中,left对应的一个字段是可能为null的。程序运行到这就会抛出NullPointException的异常,自然而然的程序就Creash了。怎么避免?很简单。Try-Catsh一下。
try {
Bundle bundle=new Bundle();
bundle.putString("title",sms.getName());
bundle.putString("left", sms.getMainSaleman().getName());
String str=sms.getCreateDate();
str=str.substring(0,10);
bundle.putString("right",str);
bundle.putString("id",sms.getId());
sourcelist.add(bundle);
}catch (NullPointerException e){
//将异常信息打印到控制台
e.printStackTrace();
Log.i("NUll","捕获到空指针异常");
}
这样程序就不会Crash了,以此类推,程序因为异常没有及时处理而引发的Crash都可以这样解决。当然,这只是粗暴的解决了问题。从根本上解决的话还需要和后台开发的同事进行沟通,对返回的数据进行有效的约束。