android 常见的异常,Android 几个常见异常且容易被忽略的地方

一、空指针异常

private String str;

private void initView() {

int a = str.length();

Log.e("zpan","=========" + a);

}

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()'

on a null object reference

at com.example.zpdemo.activity.ZpYaoActivity.initView(ZpYaoActivity.java:28)

报空指针异常肯定是“.”前面的某个变量为空。这个比较容易排查。

空指针是Crash最常见的一种也是最容易被忽略的一种,后台返回数据为空的场景,防不胜防,只要是有可能为空的数据,最好在使用之前做一次判空处理,以减少崩溃的概率;还有代码执行顺序的场景,还没赋值就拿去用,肯定会报空指针等等。

方案:做好防护工作,逻辑梳理清晰来减少崩溃的发生。

二、类型转换异常

String str = "";

int a = Integer.valueOf(str);

Caused by: java.lang.NumberFormatException: Invalid int: ""

at java.lang.Integer.invalidInt(Integer.java:138)

at java.lang.Integer.parseInt(Integer.java:358)

at java.lang.Integer.parseInt(Integer.java:334)

at java.lang.Integer.valueOf(Integer.java:525)

at com.example.zpdemo.activity.ZpYaoActivity.initView(ZpYaoActivity.java:26)

有时候我们是需要针对 API 传的数据进行类型转换,那我们就不能保证 API 传的数据不为空,如果忽略了这种场景,那等待我们的就是 Crash。

方案:针对类型转换写一个类型安全转换的函数,即返回数据为空的时候,返回默认值。

private void initView() {

String str = "";

int a = String2Int(str, 0);

Log.e("zpan","=========" + a);

}

private int String2Int(String str, int defaulValue) {

if (TextUtils.isEmpty(str)) {

return defaulValue;

}

try {

return Integer.valueOf(str);

} catch (Exception e) {

return defaulValue;

}

}

将该函数放在 Utils 类中,以便复用。同理,long、double、String等类型的转化,都可以这样防护,减少崩溃。

三、下标越界

private String str = "abc";

private void initView() {

String a = str.substring(3,6);

Log.e("zpan","=========" + a);

}

Caused by: java.lang.StringIndexOutOfBoundsException: length=3; regionStart=3; regionLength=3

at java.lang.String.startEndAndLength(String.java:298)

at java.lang.String.substring(String.java:1087)

at com.example.zpdemo.activity.ZpYaoActivity.initView(ZpYaoActivity.java:28)

取值超过本身的长度的时候,就会报下标越界异常。API传数据的时候,并且要对字符串做二次处理,这个时候就要考虑字符串取值是否会越界的场景。不仅是字符串,数组和集合同理,也要考虑这种场景。

方案:对可能会出现这种场景的数据,做数据防护。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值